如何在shell脚本中解析xml文件

Ary*_*ise 5 xml text-processing

我想知道如何从以下格式拆分我的数据:

<datas>
 <data>
  <name>Name1</name>
 </data>
 <data>
  <name>Name2</name>
 </data>
</datas>
Run Code Online (Sandbox Code Playgroud)

到以下格式:

<data><name>Name1</name></data>
<data><name>Name2</name></data>
Run Code Online (Sandbox Code Playgroud)

解析后的数据将被发送到 Python 脚本,如下所示:

 python script.py <data><name>Name1<name></data>
 python script.py <data><name>Name2<name></data>
Run Code Online (Sandbox Code Playgroud)

我试过这样的命令:

echo 'cat /datas/data' | xmllint --shell file.xml
Run Code Online (Sandbox Code Playgroud)

但是如何将所需格式的输出传递给 Python 脚本?

小智 5

我会使用 xslt。

xslt 样式表看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/datas">
  <xsl:apply-templates select="data"/>
</xsl:template>

<xsl:template match="data">
  <data><name><xsl:value-of select="./name"/></name></data><xsl:text>&#xa;</xsl:text>
</xsl:template>

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

使用程序 xsltproc 进行转换。

假设您的输入文件名为 in.xml

xslt 样式表被命名为 in.xsl

然后电话是

 xsltproc in.xsl in.xml
Run Code Online (Sandbox Code Playgroud)

输出:

<?xml version="1.0"?>
<data><name>Name1</name></data>
<data><name>Name2</name></data>
Run Code Online (Sandbox Code Playgroud)


Kus*_*nda 5

我会用XMLStarlet预处理数据:

$ xml sel -t -c '/datas/data' -nl data.xml
<data>
  <name>Name1</name>
 </data><data>
  <name>Name2</name>
 </data>
Run Code Online (Sandbox Code Playgroud)

然后这取决于你的 Python 脚本想要如何读取这些数据。希望它来自文件或标准输入......