0

我有一个名为 XML 的 xml 变量,如下所示:

<m:RgWsPublicFirmActRtUser>
      <m:firmActDescr>TEXT</m:firmActDescr>
      <m:firmActKind>2</m:firmActKind>
      <m:firmActKindDescr>TEXT</m:firmActKindDescr>
      <m:firmActCode>47191000</m:firmActCode>
</m:RgWsPublicFirmActRtUser>

我用命令回应他们

#!/bin/sh
echo $XML | grep -o -P '(?<=<m:firmActDescr>).*(?=</m:firmActDescr>)'
echo "something"

我明白了

TEXT 
something

但现在我有多个值,xml现在是这样的:

<m:RgWsPublicFirmActRtUser>
      <m:firmActDescr>TEXT</m:firmActDescr>
      <m:firmActKind>2</m:firmActKind>
      <m:firmActKindDescr>TEXT</m:firmActKindDescr>
      <m:firmActCode>47191000</m:firmActCode>
</m:RgWsPublicFirmActRtUser>
<m:RgWsPublicFirmActRtUser>
      <m:firmActDescr>TEXT2</m:firmActDescr>
      <m:firmActKind>3</m:firmActKind>
      <m:firmActKindDescr>TEXT2</m:firmActKindDescr>
      <m:firmActCode>47191000</m:firmActCode>
</m:RgWsPublicFirmActRtUser>

还有 TEXT3 等等。

我如何让我的程序显示:

TEXT1 
something
TEXT2
something 
TEXT3
something

并显示在

我不能再使用以前的方法了,只能使用“while”之类的东西和 xml 命令来获取值?谢谢!

4

1 回答 1

1

这里最好的解决方案可能是xsltproc- XSLT 非常适合处理 XML:

printf "$XML" | xsltproc firmActDescr.xslt -

在 XSLT 文件中,用于xsl:value-of获取值、xsl:text打印something<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>打印纯文本。

于 2014-06-21T23:23:39.317 回答