代码之家  ›  专栏  ›  技术社区  ›  Jason Young

如何使用xpath计算具有特定属性的节点数

  •  28
  • Jason Young  · 技术社区  · 14 年前

    我似乎无法让xpath表达式适用于我的场景。我想找到所有“device”节点的类型都是“enddevice”。我可以计算所有“设备”节点,也可以找到所有具有“enddevice”属性的“设备”节点。然而,我似乎无法将它们结合起来!

    count(//Device) //works
    //Device[@xsi:type='EndDevice'] //works
    count(//Device[@xsi:type='EndDevice']) //doesn't work
    

    如果重要的话,我正在使用XpathBuilder。

    2 回复  |  直到 11 年前
        1
  •  21
  •   Ledhund    14 年前

    我用XpathBuilder 2.0.0.4复制了它。 但是,xpath表达式在我尝试的在线评估器中正常工作和评估( http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm )

    编辑:也尝试使用最新版本的Altova XMLSpy

    输入:

    <?xml version="1.0"?>
    <asdf xmlns:xsi="n/a">
        <Device xsi:type='EndDevice'/>
        <Device xsi:type='EndDevice'/>
        <Device xsi:type='EndDevice'/>
        <Device xsi:type='EndDevice'/>
    </asdf>
    

    XSLT:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsi="n/a">
        <xsl:output indent="yes"/>
        <xsl:template match="*">
            <output>
                <xsl:value-of select="count(//Device[@xsi:type = 'EndDevice'])"/>
            </output>
        </xsl:template>
    </xsl:stylesheet>
    

    输出:

    <?xml version="1.0" encoding="UTF-8"?>
    <output xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsi="n/a">4</output>
    

    我认为是xpathbuilder做错了什么。

        2
  •  3
  •   Xavier John    11 年前

    使用保存到test.xml中的上述XML并使用该工具 http://kernowforsaxon.sourceforge.net/

    declare namespace xsi="n/a"; 
    count(doc('test.xml')//Device[@xsi:type = "EndDevice"])
    

    生成正确的输出。