使用xslt根据属性值从特定xml消息中删除属性



我对XSLT只有基本的了解,我想知道如何创建一个通用的XSLT转换,从所有节点中删除具有预定义值的属性。

这是一个示例xml

<note>
<to attribute1="REMOVE" attribute2="Keep it">Tove</to>
<from>Jani</from>
<heading hAttribute="REMOVE">Reminder</heading>
<body bAttribute="REMOVE" bAttribute2="Any">Appointment</body>
</note>

我想删除所有值为REMOVE的属性以获得此输出

<note>
<to attribute2="Keep it">Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body bAttribute2="Any">Appointment</body>
</note>

有没有一种聪明的方法来实现这一点,而不指向属性名称?

我无法测试它

你可以这样做:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>

<!-- Identity template -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- Remove any attribute with value REMOVE -->
<xsl:template match="@*[.='REMOVE']"/>

</xsl:stylesheet>

看到它在这里工作:https://xsltfiddle.liberty-development.net/gWcCf5o

相关内容

  • 没有找到相关文章

最新更新