首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >合并XML文件而忽略重复元素

合并XML文件而忽略重复元素
EN

Stack Overflow用户
提问于 2017-01-17 22:57:02
回答 2查看 627关注 0票数 0

我有两个要合并的XML文件,但我不想从原始文件中更改任何现有元素。在linux系统上最好的方法是什么?

注意:有些关于使用XSLT的帖子似乎接近我的需要,但我没有安装XSLT处理器(我也没有权利安装它)。尽管如此,我确实安装了xsltproc,但我不确定这是否会有所帮助。如果xsltproc有帮助,请提供一个适当的命令行示例。

下面是原始文件的片段:

代码语言:javascript
运行
复制
<?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>

这是我需要合并的新文件:

代码语言:javascript
运行
复制
<?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:

  1. 某些元素的现有值在新文件中更改,以及
  2. 在新文件中添加了新元素。

鉴于上述文件,我希望输出如下所示:

代码语言:javascript
运行
复制
<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>
EN

Stack Overflow用户

发布于 2017-01-17 23:20:37

我能够使用xsh以给定的方式合并这两个文件,这是一个围绕XML::LibXML的包装器,它在引擎盖下使用libxml2

代码语言:javascript
运行
复制
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 ;
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41708535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档