假设我有以下XML输入文件:
<root>
<NodeX>
...
</NodeX>
<NodeY>
...
</NodeY>
<Description>
<section01>
<subsection key="KeyA">Some text</subsection>
<subsection key="KeyB">Some text</subsection>
</section1>
<section02>
<subsection key="KeyC">Some text</subsection>
</section2>
<section03>
<subsection key="KeyD">Some Text</subsection>
</section3>
</Description>
...
</root>
另一个带有&#34;规则&#34;的XML文件其中子部分的键与受众属性一起列出。
示例摘录:
<rules>
<subsection id="01">
<key audience="internalOnly">KeyA</key>
<key audience="internalOnly">KeyB</key>
</subsection>
<subsection id="02">
<key>KeyC</key>
</subsection>
<rules>
我尝试编写一个XSL转换,根据规则XML文件中的audience属性值从输入XML文件中删除子部分。如果值为&#34; internalOnly&#34;该部分必须删除。
在示例中,应该产生以下输出XML:
<root>
<NodeX>
...
</NodeX>
<NodeY>
...
</NodeY>
<Description>
<section02>
<subsection key="KeyC">Some text</subsection>
</section2>
<section03>
<subsection key="KeyD">Some Text</subsection>
</section3>
</Description>
...
</root>
(整个section01被删除,因为两个小节都是&#34; internalOnly&#34;)。
问题是1)&#34;查找&#34;在规则XML文件中; 2)如果删除了所有相应的子部分,则删除部分元素:
如果观众属性将包含在输入XML文件中,我将根据要求创建以下XSLT:
<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:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="subsection[@audience='internalOnly']"></xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
我不认为这与您的previous question之间存在很大差异。如果要从rules.xml文档中排除某些键,请从以下位置更改keys
变量的定义:
<xsl:variable name="keys" select="key" />
为:
<xsl:variable name="keys" select="key[not(@audience='internalOnly')]" />
其他一切都可以保持不变。
了解XSLT键功能的用法存在问题
这是非常值得的。