【发布时间】:2013-04-16 12:42:13
【问题描述】:
抱歉,我再次发布此内容,但很多要求已更改,我需要建议。
我的第一个输入文件是
Root1 TBLA KEY1 COLA A B
Root1 TBLA KEY1 COLB D E
Root1 TBLA KEY3 COLX M N
Root2 TBLB KEY4 COLX M N
Root2 TBLB KEY4 COLD A B
Root3 TBLC KEY5 COLD A B
我的第二个输入文件是
Root1 TBLA KEY6
Root2 TBLB KEY7
Root3 TBLC KEY8
我的第三个输入文件是
Root1 TBLA KEY9
Root1 TBLA KEY10
Root3 TBLC KEY11
基本上文件表示是
1) 第一个文件代表旧值和新值。首先是根表,其次是存在差异的实际表。第三列告诉键值。第四和第五代表旧值和新值。
2) 第二个文件表示只存在于 db1 中而不存在于 db2 中的主键。首先是根表,其次是存在键的实际表。第三列告诉键值
3) 第三个文件表示只存在于 db2 中而不存在于 db1 中的主键。首先是根表,其次是存在键的实际表。第三列告诉键值
要以 xml 格式创建的输出为
<Data>
<Root1>
<TBLA>
<NEW1>
<KEY>KEY6</KEY>
<NEW1>
<NEW2>
<KEY>KEY9</KEY>
<KEY>KEY10</KEY>
<NEW2>
<MODIFIED>
<KEY name =KEY1>
<COLA>
<oldvalue>A</oldvalue>
<newvalue>B</newvalue>
</COLA>
<COLB>
<oldvalue>D</oldvalue>
<newvalue>E</newvalue>
</COLB>
</KEY>
<KEY name =KEY3>
<COLX>
<oldvalue>M</oldvalue>
<newvalue>N</newvalue>
</COLX>
</KEY>
</MODIFIED>
</TBLA>
</Root1>
<Data>
这不是完整的输出。显示部分输出
任何人都可以建议什么是最好的方法来做到这一点。我是否应该先将此文本文件转换为哈希值,然后尝试使用pltoxml()。这有意义吗?可以XML::Simple 或XML::Writer 就够了。
这是我第一次使用 xml,但不确定哪种方法可以有效地帮助我解决问题。
我的请求的一个小例子将不胜感激。
*输入文件将始终按 Root 排序,然后按 TBLNAME 排序
输出格式
输出包含每个根、该根中的每个表以及每个表的输出,其中存在一个的键,然后仅存在于第二个的键。这分别出现在 new1 和 new2 部分。第三部分包含 Modified ,它需要从第一个输入文件中读取并列出键值以及使用该键值修改哪些列(它们的旧值和新值)
如果我必须使用 XML::Simple,我如何从这些文件创建 hashref,我可以将它传递给 XMLout。这些文件中都没有密钥。
【问题讨论】:
-
嗨,其实我最初的问题很简单,所以我得到了一些建议。但是我用最新的 cmets 更新了这个问题,但不确定是否会再次检查它,因为人们已经为此做出了贡献。所以我再次发布了同样的新问题。我不确定我是否更新了已回答的问题再次被专家查看
-
您不应该修改旧问题。创建一个新的是正确的。改变旧的不是。我已将旧问题退回到您进行编辑之前。
标签: perl xml-parsing