使用 XSLT 删除 XML 节点文本
Remove XML Node text using XSLT
我需要使用 XSLT 修改 xml 文档。我需要的是从 xml 文档中删除一些节点名称。
示例:
<link ref="www.facebook.com">
<c type="Hyperlink">www.facebook.com<c>
</link>
我需要这样转换这个xml(去掉<c>
节点和属性形式xml),
<link ref="www.facebook.com">
www.facebook.com
</link>
我尝试了很多方法,但 none 效果很好。
有什么建议吗?
这是一种方法:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="c">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
这是另一个:
<xsl:template match="link">
<xsl:copy>
<xsl:copy-of select="@* | c/text()"/>
</xsl:copy>
</xsl:template>
还有另一种方法:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="link">
<link>
<xsl:copy-of select="@*"/><!-- copies the @ref attribute (and any other) -->
<xsl:value-of select="c[@type='hyperlink']"/>
</link>
</xsl:template>
我需要使用 XSLT 修改 xml 文档。我需要的是从 xml 文档中删除一些节点名称。
示例:
<link ref="www.facebook.com">
<c type="Hyperlink">www.facebook.com<c>
</link>
我需要这样转换这个xml(去掉<c>
节点和属性形式xml),
<link ref="www.facebook.com">
www.facebook.com
</link>
我尝试了很多方法,但 none 效果很好。 有什么建议吗?
这是一种方法:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="c">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
这是另一个:
<xsl:template match="link">
<xsl:copy>
<xsl:copy-of select="@* | c/text()"/>
</xsl:copy>
</xsl:template>
还有另一种方法:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="link">
<link>
<xsl:copy-of select="@*"/><!-- copies the @ref attribute (and any other) -->
<xsl:value-of select="c[@type='hyperlink']"/>
</link>
</xsl:template>