xslt 检查 child 节点是否以 2 个值的组合退出
xslt check if child nodes exits with a combination of 2 values
我想知道是否有条件id != -1 和status = Active 或Done 的订单节点。
有关详细信息,请参阅下面的输入和输出
示例 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>
标签)因为没有订单节点匹配 id != -1 并且状态是 Active 或 Done
我的 xslt 因示例 2 输入而失败
对于示例 2,我得到的输出为 <orders-list> </order-list>
我应该得到空洞的回应。我不想要没有 child.
的 <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>
For Example 2 I am getting output as <orders-list> </order-list>
我从你的代码中得到的只是多个错误。例如:
<status><xsl:value-of select="status'" /></id>
不是 well-formed 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>
我想知道是否有条件id != -1 和status = Active 或Done 的订单节点。 有关详细信息,请参阅下面的输入和输出
示例 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>
标签)因为没有订单节点匹配 id != -1 并且状态是 Active 或 Done
我的 xslt 因示例 2 输入而失败
对于示例 2,我得到的输出为 <orders-list> </order-list>
我应该得到空洞的回应。我不想要没有 child.
<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>
For Example 2 I am getting output as
<orders-list> </order-list>
我从你的代码中得到的只是多个错误。例如:
<status><xsl:value-of select="status'" /></id>
不是 well-formed 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>