对于输入文件:
$ more input.xml
<root>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>showServerInfo</param-name>
<param-value>false</param-value>
</init-param>
</root>
您可以使用以下 XSLT 样式表:
$ more listing_conv.xslt
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="//init-param[./param-name = 'listings']/param-value">
<param-value>false</param-value>
</xsl:template>
</xsl:stylesheet>
说明:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
这部分将复制 XML 文件中的所有内容(默认行为),除非您到达 XPATH://init-param[./param-name = 'listings']/param-value
<xsl:template match="//init-param[./param-name = 'listings']/param-value">
<param-value>false</param-value>
</xsl:template>
第二部分将允许您将 param-value 的值更改为 false。
因为 XPATH 将访问名称为 init-param 的元素,这些元素有一个名为 param-name 的子元素,其值设置为 listings。对于这些元素,您可以访问名为param-value 的子元素并将其覆盖为false。
输出:
$ xsltproc listing_conv.xslt input.xml
<?xml version="1.0"?>
<root>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>showServerInfo</param-name>
<param-value>false</param-value>
</init-param>
</root>
我已经使用xsltproc 命令运行 XSLT proc,但您可以使用其他命令作为 xalan,或者您可以下载一个 saxon 解析器 jar:saxon9he.jar 并运行 java -jar saxon9he.jar <attributes>
更多信息:
I need a simple command line program to transform XML using an XSL Stylesheet