如何使用Perl将XML文件转换为格式不同的XML文件?

时间:2014-08-17 17:25:57

标签: xml perl xml-rpc

许多广播电台正在使用新闻节目,将故事和新闻广播作为XML文件导出,如此

<?xml version="1.0" encoding="UTF-8"?>
<PublishStory>
    <Name>Story Title</Name>
    <Description>Description of the Story</Description>
    <Story>
        <Text>Story Text</Text>
        <Media>
            <Name>Media Name</Name>
            <Description>Description of Media</Description>
            <OutCue>Last Sound on Media</OutCue>
            <Length>001:11.653</Length>
            <FileName>MediaName.wav</FileName>
        </Media>
    </Story>
    <PublishTime>2014-08-18T20:17:41.0000000</PublishTime>
    <ExpiresAfter>2014-08-22T20:17:41.0000000</ExpiresAfter>
    <RtfFile>Name Of Associated RTF file.rtf</RtfFile>
</PublishStory>

但XML文件的格式并非设计用于使用RPCXML将故事发布到Joomla等网站。我有一个简单的解析解决方案:

#!/usr/bin/env perl
use strict;
use warnings;

# use module
use XML::Simple;
use Data::Dumper;

# create object
my $xml = new XML::Simple;

# read XML file
my $data = $xml->XMLin("StartingXMLfile.xml");

# access XML data
print $data->{Name};
print "\n";
print $data->{Description};
print "\n";
print $data->{Story}{Text};
print "\n";
print $data->{Story}{Media}{Description};
print "\n";
print $data->{Story}{Media}{FileName};
print "\n";
print $data->{Story}{Media}{Name};
print "\n";
print $data->{Story}{Media}{Length};
print "\n";
print $data->{PublishTime};
print "\n";
print $data->{ExpiresAfter};
print "\n";

但是我无法想出为RPC部分创建XML文件的方法。 最终的XML文件看起来像这样:

<?xml version="1.0" encoding="UTF-8" ?>
<methodCall>
    <methodName><![CDATA[metaWeblog.newPost]]></methodName>
    <params>
        <param><value><string><![CDATA[0]]></string></value></param>
        <param><value><string><![CDATA[AccountName]]></string></value></param>
        <param><value><string><![CDATA[AccountPsswd]]></string></value></param>
        <param><value><struct>
            <member>
                <name><![CDATA[title]]></name>
                <value><string><![CDATA[Story Name]]></string></value>
            </member>
            <member>
                <name><![CDATA[description]]></name>
                <value><string><![CDATA[Story Description]]></string></value>
            </member>
            <member>
                <name><![CDATA[categories]]></name>
                <value><array><data>
                    <value><string><![CDATA[Category]]></string></value>
                </data></array></value>
            </member>
            <member>
                <name><![CDATA[mt_keywords]]></name>
                <value><string><![CDATA[]]></string></value>
            </member>
            <member>
                <name><![CDATA[custom_fields]]></name>
                <value><array><data/></array></value>
            </member>
            <member>
                <name><![CDATA[mt_excerpt]]></name>
                <value><string><![CDATA[]]></string></value>
            </member>
        </struct></value></param>
        <param><value><boolean>1</boolean></value></param>
    </params>
</methodCall>

最后,我希望有一些能在cron作业上运行的东西,它会检查XML文件的目录,转换文件并使用curl将XML发布到网站上。 然后删除原始XML和转换后的XML。

0 个答案:

没有答案
相关问题