就这么简单——没有变量,没有xsl:chose
,没有xsl:when
,没有xsl:otherwise
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select=
"/*[header/someId]/results/product[externalId=/*/header/someId]
|
/*[not(header/someId)]/results/product
"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于提供的 XML 文档时:
<output>
<header>
<someId>ABC123</someId>
</header>
<results>
<product id="A">
<externalId>XYZ666</externalId>
<title>some title a</title>
</product>
<product id="B">
<externalId>ABC123</externalId>
<title>some title b</title>
</product>
<product id="C">
<externalId>666777</externalId>
<title>some title c</title>
</product>
</results>
</output>
产生了想要的正确结果:
<product id="B">
<externalId>ABC123</externalId>
<title>some title b</title>
</product>
当对这个 XML 文档应用相同的转换时:
<output>
<results>
<product id="A">
<externalId>XYZ666</externalId>
<title>some title a</title>
</product>
<product id="B">
<externalId>ABC123</externalId>
<title>some title b</title>
</product>
<product id="C">
<externalId>666777</externalId>
<title>some title c</title>
</product>
</results>
</output>
再次产生所需的正确结果:
<product id="A">
<externalId>XYZ666</externalId>
<title>some title a</title>
</product>
<product id="B">
<externalId>ABC123</externalId>
<title>some title b</title>
</product>
<product id="C">
<externalId>666777</externalId>
<title>some title c</title>
</product>
说明:
Exp1
当给定条件someCondition
为时,我们使用一种通用方法(通过表达式)选择一个节点集,并在相同条件为 时true()
选择另一个节点集(通过表达式) 。Exp2
false()
被联合的两个表达式每个都可以在两个互斥条件下选择一个节点,因此,根据它们的条件值,只有一个表达式可以选择一个节点。
Exp1[someCondition] | Exp2[not(someCondition)]