我有一个以下格式的xml文件
<input>
<node1>No Update<node1>
<node2>No Update<node2>
<node3>No Update<node3>
<node4>Data<node4>
<input>
我的要求是更新那些包含数据“无更新”的节点的值。进入空字符串,以便所需的输出
<input>
<node1><node1>
<node2><node2>
<node3><node3>
<node4>Data<node4>
<input>
如何使用xslt实现它,有人可以帮忙。
答案 0 :(得分:1)
使用此XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[text() = 'No Update']/text()"/>
</xsl:stylesheet>
如果您不想在输出中使用自封闭标记,请将模板更改为:
<xsl:template match="*[text() = 'No Update']/text()">
<xsl:value-of select="''"/>
</xsl:template>
答案 1 :(得分:0)
只需使用此简短(呃)转换 - 覆盖身份规则的相同想法,但匹配仅必要的文本节点 - 而不是元素节点。 :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()[. = 'No Update']"/>
</xsl:stylesheet>
对提供的XML应用此转换(更正为格式良好的XML文档):
<input>
<node1>No Update</node1>
<node2>No Update</node2>
<node3>No Update</node3>
<node4>Data</node4>
</input>
产生了想要的正确结果:
<input>
<node1/>
<node2/>
<node3/>
<node4>Data</node4>
</input>