Я довольно новичок в XSLT.Использование переменной для удаления узла в XSLT
Я пытался удалить узел из моего XML на основе значения другого узла в XML.
скажем, у меня есть этот XML:
<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>
и у меня есть следующий XSLT (версия 1.0):
<?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 к " TTT "и удалить attributeID 6.
Однако, если я хочу основать удаление атрибута 6 на t он значение атрибута 3 Я хотел бы добавить что-то вроде этого:
<xsl:template match="order//orderAttributes[attributeID='6'][preceding::orderAttributes[attributeIDX9='3' and valueX9='TTT']]">
Конечно, это не будет работать, так как XSLT не процедурный и будет работать только на исходном дереве. Невозможно выполнить попытку использовать параметр как условие, так как я не могу использовать переменные в шаблоне соответствия.
Есть ли способ, я могу сделать что-то вроде этого? (для целей примера я дал значение по умолчанию attribute3 как «ТТТ», но это входной параметр, который может быть изменен, кто использует этот XSLT)
«* Я хочу основать удаление атрибута 6 по значению атрибута 3 *« Что именно это означает? Вы хотите удалить атрибут 6, когда значение атрибута 3 ... что? –
как показано в моем примере - когда значение TTT. Однако TTT происходит только в XSLT –
В вашем примере значение атрибута 3 является «CCC». Пожалуйста, сформулируйте условие на основе ввода (включая, если необходимо, параметры), а не на выходе. –