如何使用perl将标签和属性添加到XML文件中?

时间:2010-11-28 00:24:48

标签: xml perl

  

可能重复:
  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"

我真的需要帮助吗?

由于

1 个答案:

答案 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编写器运行整个结构,你就完成了。

现在,至于实际的实施,这取决于你。有了这个你就知道如何做到这一点。当您在途中偶然发现小的实施细节时,那就是当你谷歌或在这里询问时。

另外请记住,这不是一个详尽的描述,我不知道所有的变量和输入,所以我可能会弄错。保持机智。

祝你好运。