Unix:在文件中的 XML 个标签之间交换值
Unix: Swapping Values Between XML Tags In a File
如何使用 Unix 命令行执行以下操作?我在 Solaris 10 OS
From:
<Parent>
<From>abc</From>
<To>xyz</To>
</Parent>
to:
<Parent>
<From>xyz</From>
<To>abc</To>
</Parent>
如果您不想使用 awk 或 sed,您可以使用 xsltproc,它应该在 Solaris 上可用(该软件包称为 libxslt):
transform.xsl:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Parent">
<xsl:copy>
<xsl:copy-of select="To"/>
<xsl:copy-of select="From"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
命令行:
xsltproc transform.xsl myfile.xml
上面的 XSLT 样式表使用 "identity transform"(第一个模板一对一复制所有内容)并为 Parent 元素添加特殊规则。如果你的 XML 只包含上面的简单结构,你可以省略第一个 xsl:template.
如何使用 Unix 命令行执行以下操作?我在 Solaris 10 OS
From:
<Parent>
<From>abc</From>
<To>xyz</To>
</Parent>
to:
<Parent>
<From>xyz</From>
<To>abc</To>
</Parent>
如果您不想使用 awk 或 sed,您可以使用 xsltproc,它应该在 Solaris 上可用(该软件包称为 libxslt):
transform.xsl:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Parent">
<xsl:copy>
<xsl:copy-of select="To"/>
<xsl:copy-of select="From"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
命令行:
xsltproc transform.xsl myfile.xml
上面的 XSLT 样式表使用 "identity transform"(第一个模板一对一复制所有内容)并为 Parent 元素添加特殊规则。如果你的 XML 只包含上面的简单结构,你可以省略第一个 xsl:template.