我有两个要合并的XML文件,但我不想从原始文件中更改任何现有元素。在linux系统上最好的方法是什么?
注意:有些关于使用XSLT的帖子似乎接近我的需要,但我没有安装XSLT处理器(我也没有权利安装它)。尽管如此,我确实安装了xsltproc,但我不确定这是否会有所帮助。如果xsltproc有帮助,请提供一个适当的命令行示例。
下面是原始文件的片段:
<?xml version="1.0" encoding="utf-8"?>
<config xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
<Comment>This file was automatically generated.</Comment>
<FieldAttrs>
<Name>FieldAttrsAll</Name>
<Field>
<Name>wLegExchInstIds</Name>
<Fid>6203</Fid>
<Type>StringVector</Type>
<CheckModified>true</CheckModified>
<PublishField>true</PublishField>
<ClearDaily>false</ClearDaily>
</Field>
<Field>
<Name>wPartitionId</Name>
<Fid>5886</Fid>
<Type>Integer</Type>
<CheckModified>true</CheckModified>
<PublishField>true</PublishField>
<ClearDaily>false</ClearDaily>
</Field>
</FieldAttrs>
</config>这是我需要合并的新文件:
<?xml version="1.0" encoding="utf-8"?>
<config xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
<Comment>This file was automatically generated.</Comment>
<FieldAttrs>
<Name>FieldAttrsAll</Name>
<Field>
<Name>wLegExchInstIds</Name>
<Fid>6203</Fid>
<Type>StringVector</Type>
<CheckModified>false</CheckModified>
<PublishField>false</PublishField>
<ClearDaily>false</ClearDaily>
</Field>
<Field>
<Name>wPartitionId</Name>
<Fid>5886</Fid>
<Type>Integer</Type>
<CheckModified>false</CheckModified>
<PublishField>false</PublishField>
<ClearDaily>false</ClearDaily>
</Field>
<Field>
<Name>wUnverifiedPriceIndicator</Name>
<Fid>5885</Fid>
<Type>Bool</Type>
<CheckModified>true</CheckModified>
<PublishField>true</PublishField>
<ClearDaily>true</ClearDaily>
</Field>
<Field>
<Name>wCorrIsIrregular</Name>
<Fid>5884</Fid>
<Type>Bool</Type>
<CheckModified>false</CheckModified>
<PublishField>true</PublishField>
<ClearDaily>true</ClearDaily>
</Field>
</FieldAttrs>
</config>特别是附注2:
鉴于上述文件,我希望输出如下所示:
<config xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
<Comment>This file was automatically generated.</Comment>
<FieldAttrs>
<Name>FieldAttrsAll</Name>
<Field>
<Name>wLegExchInstIds</Name>
<Fid>6203</Fid>
<Type>StringVector</Type>
<CheckModified>true</CheckModified>
<PublishField>true</PublishField>
<ClearDaily>false</ClearDaily>
</Field>
<Field>
<Name>wPartitionId</Name>
<Fid>5886</Fid>
<Type>Integer</Type>
<CheckModified>true</CheckModified>
<PublishField>true</PublishField>
<ClearDaily>false</ClearDaily>
</Field>
<Field>
<Name>wUnverifiedPriceIndicator</Name>
<Fid>5885</Fid>
<Type>Bool</Type>
<CheckModified>true</CheckModified>
<PublishField>true</PublishField>
<ClearDaily>true</ClearDaily>
</Field>
<Field>
<Name>wCorrIsIrregular</Name>
<Fid>5884</Fid>
<Type>Bool</Type>
<CheckModified>false</CheckModified>
<PublishField>true</PublishField>
<ClearDaily>true</ClearDaily>
</Field>
</FieldAttrs>
</config>发布于 2017-01-17 23:20:37
我能够使用xsh以给定的方式合并这两个文件,这是一个围绕XML::LibXML的包装器,它在引擎盖下使用libxml2:
my $old := open old.xml ;
$field := hash Name //Field ;
open new.xml ;
for //Field {
$exists = xsh:lookup('field', Name) ;
if not($exists)
copy . into $old/config/FieldAttrs ;
}
save :f merged.xml $old ;https://stackoverflow.com/questions/41708535
复制相似问题