#xml #xslt #xslt-1.0 #transformation
#xml #xslt #xslt-1.0 #преобразование
Вопрос:
Я хочу знать, есть ли какие-либо узлы заказа с идентификатором критерия!= -1 и статусом = Активный или выполненный. Смотрите ниже входы и выходы для получения подробной информации
Пример 1
<order-request>
<orders>
<order>
<name>John</name>
<id>1</id>
<status>Done</id>
</order>
<order>
<name>Smith</name>
<id>-1</id>
<status>Pending</id>
</order>
</orders>
</order-request>
ВЫВОД для вышеуказанного xml должен быть
<orders-list>
<order>
<name>John</name>
<id>1</id>
<status>Done</id>
</order>
</orders-list>
Пример 2
<order-request>
<orders>
<order>
<name>John</name>
<id>-1</id>
<status>Done</id>
</order>
<order>
<name>Smith</name>
<id>456</id>
<status>Pending</id>
</order>
</orders>
</order-request>
ВЫВОД
Я должен получить пустой ответ от xslt (также я не должен получать <orders-list>
тег), потому что нет соответствующего идентификатора узла заказа! = -1 и статус активен или Выполнен
Мой xslt не работает с вводом примера 2
Например, 2 Я получаю вывод, так как <orders-list> </order-list>
я должен получить пустой ответ. Я не хочу <order-list>
тег без дочернего элемента.
<xsl:stylesheet>
<xsl:template match="order-request">
<xsl:if
test="(orders/order/id[.!= -1]) and ((orders/order/status[.='Active']) or
orders/order/status[.='Done']))">
<orders-list>
<xsl:apply-templates
select="order"></xsl:apply-templates>
</orders-list>
</xsl:if>
</xsl:template>
<xsl:template match="order">
<xsl:if test="(id != -1) and (status ='Active' or status ='Done')">
<order>
<name><xsl:value-of select="name" /></name>
<id><xsl:value-of select="id" /></id>
<status><xsl:value-of select="status'" /></status>
</order>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Комментарии:
1. Код в вашем вопросе предназначен для того, чтобы позволить нам воспроизвести вашу проблему и найти решение. Когда вы публикуете неаккуратный код, полный подобных ошибок, вы тратите время людей, которые пытаются вам помочь. Пожалуйста, имейте это в виду в следующий раз.
Ответ №1:
Например, 2 я получаю вывод в виде
<orders-list> </order-list>
Все, что я получаю с вашим кодом, — это множественные ошибки. Например:
<status><xsl:value-of select="status'" /></id>
неправильно сформированный XML.
Как насчет чего-то простого:
XSLT 1.0
<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="/order-request">
<xsl:variable name="eligible-orders" select="orders/order[id=1 and (status ='Active' or status ='Done')]" />
<xsl:if test="$eligible-orders">
<orders-list>
<xsl:copy-of select="$eligible-orders"/>
</orders-list>
</xsl:if>
</xsl:template>
</xsl:stylesheet>