如何使用 XSLT 根据值删除特定 XML 元素
How to remove specific XML elements based on value with XSLT
我认为我正在尝试的事情非常简单,但由于我是 XSLT 的新手并且已经 trying/searching 大约 4 个小时了,我想我会问...
假设我们有这个 XML 我们想要转换:
<?xml version="1.0" encoding="UTF-8"?>
<node>
<field1>test</field1>
<field2>/</field2>
<field3>test2</field3>
<field4>/<field4>
</node>
我想使用 XSLT 1.0 对此进行转换,以便复制整个结构和所有值,除了 具有值“/”的元素。应该很容易吧?
到目前为止我已经找到了这个,我认为它离我需要的不远,但它还没有工作...
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//text()='/'" />
</xsl:transform>
所以我期望的输出是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<node>
<field1>test</field1>
<field3>test2</field3>
</node>
尝试此操作时,出现未指明的错误。未指定,因为我正在使用免费的在线工具进行转换。
任何帮助将不胜感激!
谢谢!
你好,尼克
//text()='/'
不是有效的位置路径。
在任何情况下,您想要删除元素,而不是文本节点 - 因此您应该使用类似的东西:
<xsl:template match="*[.='/']" />
我认为我正在尝试的事情非常简单,但由于我是 XSLT 的新手并且已经 trying/searching 大约 4 个小时了,我想我会问...
假设我们有这个 XML 我们想要转换:
<?xml version="1.0" encoding="UTF-8"?>
<node>
<field1>test</field1>
<field2>/</field2>
<field3>test2</field3>
<field4>/<field4>
</node>
我想使用 XSLT 1.0 对此进行转换,以便复制整个结构和所有值,除了 具有值“/”的元素。应该很容易吧? 到目前为止我已经找到了这个,我认为它离我需要的不远,但它还没有工作...
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//text()='/'" />
</xsl:transform>
所以我期望的输出是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<node>
<field1>test</field1>
<field3>test2</field3>
</node>
尝试此操作时,出现未指明的错误。未指定,因为我正在使用免费的在线工具进行转换。 任何帮助将不胜感激!
谢谢!
你好,尼克
//text()='/'
不是有效的位置路径。
在任何情况下,您想要删除元素,而不是文本节点 - 因此您应该使用类似的东西:
<xsl:template match="*[.='/']" />