首页 > 解决方案 > 如何仅从 xml 文件中提取特定部分并合并它们?

问题描述

我有许多想要合并到一个文件中的 xml 文件。我不想从根合并它们,而是从其中一个孩子合并它们。如何使用 grep/sed/awk 语句继续它?

XML 1:

<root>
   <version>AB</version>
   <Data>
       <Title>MyTitle</Title>
       <SubTitle>Mysub</SubTitle>
   </Data>
   <file author="JXJX" name="MyFile1">
       <desc>File1</desc>
       <field>Random Field</field>
   </file>
<root>

XML 2:

<root>
   <version>AB</version>
   <Data>
       <Title>MyTitle 2</Title>
       <SubTitle>Mysub 2</SubTitle>
   </Data>
   <file author="HIGH" name="MyFile2">
       <desc>File2</desc>
       <field>Random Field</field>
   </file>
<root>

我想要以下 XML 文件:

<root>
    <file author="JXJX" name="MyFile1">
       <desc>File1</desc>
       <field>Random Field</field>
    </file>
    <file author="HIGH" name="MyFile2">
       <desc>File2</desc>
       <field>Random Field</field>
    </file>
</root>

标签: xmlshellsedscriptinggrep

解决方案


不要使用 regex 解析 XML,而是使用适当的解析器,如

$ xidel -se '
  element root {
    doc("1.xml")//file,
    doc("2.xml")//file
  }
' --output-node-format=xml --output-node-indent
<root>
  <file author="JXJX" name="MyFile1">
    <desc>File1</desc>
    <field>Random Field</field>
  </file>
  <file author="HIGH" name="MyFile2">
    <desc>File2</desc>
    <field>Random Field</field>
  </file>
</root>

推荐阅读