これと同じくらい簡単です -- 変数なし、 no xsl:chose
、 no xsl:when
、 noxsl: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
特定の条件が である場合に 1 つのノード セットを (式 によって)someCondition
選択し、同じ条件が である場合にtrue()
別のノード セットを (式 によって)選択する一般的な方法を使用します。Exp2
false()
結合された 2 つの式は、相互に排他的な 2 つの条件の下でノードを選択できます。したがって、条件の値に応じて、一方の式だけがノードを選択できます。
Exp1[someCondition] | Exp2[not(someCondition)]