私はむしろXSLTの新機能です。変数を使ってXSLTのノードを削除する
XMLの別のノードの値に基づいて、XMLからノードを削除しようとしていました。 「
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:param name="Attribute2" select="'BBB'" />
<xsl:param name="Attribute3" select="'TTT'" />
<xsl:output method="xml" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="orderAttributes">
<xsl:choose>
<xsl:when test="attributeID[text()=3]">
<attributeValueChangeX9>
<attributeID>3</attributeID>
<attributeValue><xsl:value-of select="$Attribute3"/></attributeValue>
</attributeValueChangeX9>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="order//orderAttributes[attributeID='6']">
</xsl:template>
これはにattributeID 3の値を変更します:
<root>
<body>
<order>
<orderAttributes>
<attributeID>1</attributeID>
<attributeValue>AAA</attributeValue>
</orderAttributes>
<orderAttributes>
<attributeID>2</attributeID>
<attributeValue>BBB</attributeValue>
</orderAttributes>
</order>
<order>
<orderAttributes>
<attributeID>3</attributeID>
<attributeValue>CCC</attributeValue>
</orderAttributes>
<orderAttributes>
<attributeID>4</attributeID>
<attributeValue>DDD</attributeValue>
</orderAttributes>
</order>
<order>
<orderAttributes>
<attributeID>5</attributeID>
<attributeValue>EEE</attributeValue>
</orderAttributes>
<orderAttributes>
<attributeID>6</attributeID>
<attributeValue>FFF</attributeValue>
</orderAttributes>
</order>
</body>
</root>
と私は(1.0のver)以下のXSLTを持っている:
のは、私はこのXMLを持っているとしましょうTTT "を削除してattributeID 6を削除します。
ただし、属性6の削除をtもちろん
<xsl:template match="order//orderAttributes[attributeID='6'][preceding::orderAttributes[attributeIDX9='3' and valueX9='TTT']]">
XSLTで手続きではなく、唯一のソースツリー上で動作するよう、これは動作しません:彼は、属性3の値私はこのようなものを追加します。 パラメータを条件として使用しようとすると、一致パターンで変数を使用できないため、どちらも実行できません。
このようなことができる方法はありますか? (例の目的のために、私は「TTT」としてattribute3のデフォルト値を与えたが、これは、このXSLTを使用しています誰によって変更することができる入力パラメータである)
"*属性3の値に属性6の削除を基にしたい*"それはどういう意味ですか?アトリビュート3の値が...何であれば、アトリビュート6を削除しますか? –
私の例で示したように - 値がTTTのとき。しかし、TTTはXSLTでのみ発生しています –
あなたの例では、属性3の値は "CCC"です。入力に基づいて条件を定式化してください(必要に応じてパラメータを含む)。 –