根据后代的几种条件选择节点

时间:2020-05-19 10:13:33

标签: xslt xpath xslt-3.0

鉴于下面的XML文件,我尝试计数(并且一旦起作用,请选择)类型= 1和状态= 2的卡的数量,但是我找不到使用XPath的解决方案,因为我从未使用XSL和我很早以前就在Saxon上使用过XPath,我想我对此没有足够的了解...(XSLT 3.0)

感谢您的帮助

source.xml

<?xml-stylesheet type="text/xsl" href="process.xsl"?>
<root>
    <card>
        <Prop prop_name="number" val="0001" />
        <Prop prop_name="type" val="1" />
        <Prop prop_name="state" val="1" />
    </card>
    <card>
        <Prop prop_name="number" val="0002" />
        <Prop prop_name="type" val="1" />
        <Prop prop_name="status" val="1" />
    </card>
    <card>
        <Prop prop_name="number" val="0003" />
        <Prop prop_name="type" val="1" />
        <Prop prop_name="status" val="2" />
    </card>
    <card>
        <Prop prop_name="number" val="0004" />
        <Prop prop_name="type" val="1" />
        <Prop prop_name="status" val="2" />
    </card>
</root>

process.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="UTF-8" indent="yes" omit-xml-declaration="yes" />
    <xsl:strip-space elements="*"/>
    <xsl:template match="/">
    <xsl:variable name="nb_active_cards" select="count(//card/[Prop[@prop_name='type' and @val='1'] and Prop[@prop_name='status' and @val='2']])"/>
        <xsl:value-of select="$nb_active_cards" />
    </xsl:template>
</xsl:stylesheet>

0 个答案:

没有答案
相关问题