可能重复:
how to read a text file and use it to update XML tag with perl
您好,
我有一个XML文档,如下所示:
XML文件
<users>
<user>
<id>12345567</id>
<name>Ronsna Stedinberg</name>
</user>
<user>
<id>12345568</id>
<name>Sonsna Dtedinberg</name>
</user>
</users>
和一个看起来像这样的文本文件:
文字档案
Ronsna John Stedinberg y Sonsna Dtedinberg
我需要能够读取文本文件并在XML文件中更改名称标签,通知firstname,middlename(如果有)和lastname基于我在文本文件中的数据,并添加{{1 }}}当且仅当“y”存在于文本文件中任何行的末尾,否则为op="y"
。
输出应如下所示:
输出文件
op="n"
我真的需要帮助吗?
由于
答案 0 :(得分:0)
首先,对一般问题的更通用的答案:要将标签和属性添加到XML文件中,您不希望自己实际操作XML。这是脆弱,困难和不必要的重复。相反,您希望将XML和您拥有的任何其他输入文件转换为由Perl基本变量构建的Perl数据结构:Scalars,array,hashes。
以下是您可以做的大致概述:
将类似File::Slurp的文本文件读入数组。将每一行拆分为自己的数组,然后为每一行创建一个匿名哈希。如果行数组中的最后一个元素是y或n,则将它弹出()并将其存储为散列键“op”。然后,如果结果为3,则在hashkeys firstname,middlename,lastname中按顺序添加值;或者如果它是2,只需要在firstname,lastname。
你最终得到一系列哈希,也许称之为@replacements。
然后使用像XML::Simple这样的解析器加载XML文件,该解析器生成一个数据结构,其中包含代表用户的哈希数组。对于每个用户,您将firstname和lastname键拆分为它们自己的元素。然后为每个用户迭代每个替换,查找firstname和lastname匹配的用户。
如果有,请使用替换中的数据重建名称数据结构。
然后通过XML编写器运行整个结构,你就完成了。
现在,至于实际的实施,这取决于你。有了这个你就知道如何做到这一点。当您在途中偶然发现小的实施细节时,那就是当你谷歌或在这里询问时。
另外请记住,这不是一个详尽的描述,我不知道所有的变量和输入,所以我可能会弄错。保持机智。
祝你好运。