使用 XSLT 过滤不包含节点的 XYZ
Posted
技术标签:
【中文标题】使用 XSLT 过滤不包含节点的 XYZ【英文标题】:Filter XYZ not containing nodes using XSLT 【发布时间】:2021-10-25 18:27:01 【问题描述】:我是 xslt 转换的新手,我们需要使用 xslt 进行有效负载转换 您能帮我过滤不包含以下输入节点的 XYZ 吗
输入:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Test>
<responseStatus>SUCCESS</responseStatus>
<responseDetails>
<limit>1000</limit>
<offset>0</offset>
<size>55</size>
<total>55</total>
</responseDetails>
<data>
<row>
<id>131</id>
<documentNumber>123</documentNumber>
<version>131_1_0</version>
<title__v>test</title__v>
<document_business_unit__cr.name__v>
<value>Global XYZ</value>
</document_business_unit__cr.name__v>
</row>
<row>
<id>131</id>
<documentNumber>123</documentNumber>
<version>131_1_0</version>
<title__v>test</title__v>
<document_business_unit__cr.name__v>
<value>Local XYZ</value>
</document_business_unit__cr.name__v>
</row>
<row>
<id>131</id>
<documentNumber>123</documentNumber>
<version>131_1_0</version>
<title__v>test</title__v>
<document_business_unit__cr.name__v>
<value>Global</value>
</document_business_unit__cr.name__v>
</row>
</data>
</Test>
期望的输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Test>
<responseStatus>SUCCESS</responseStatus>
<responseDetails>
<limit>1000</limit>
<offset>0</offset>
<size>55</size>
<total>55</total>
</responseDetails>
<data>
<row>
<id>131</id>
<documentNumber>123</documentNumber>
<version>131_1_0</version>
<title__v>test</title__v>
<document_business_unit__cr.name__v>
<value>Global</value>
</document_business_unit__cr.name__v>
</row>
</data>
</Test>
您能帮我将上述输入的 XSLT 代码转换为所需的输出吗
【问题讨论】:
为此只需添加一个空模板以匹配 xsl 中的data/row[contains(descendant::value, 'XYZ')]
。
【参考方案1】:
在这里你必须阻止所有带有文本'XYZ'的row
节点。
<xsl:stylesheet version="2.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="row[contains(descendant::value, 'XYZ')]"/>
</xsl:stylesheet>
【讨论】:
以上是关于使用 XSLT 过滤不包含节点的 XYZ的主要内容,如果未能解决你的问题,请参考以下文章
使用xslt和c#从中选择一个xml节点并根据其值添加更多节点[重复]
包含 ∈ 的 XML 文档无效 - 如何使用 XSLT 输出?