gpt4 book ai didi

xml - XSLT count() 包括引用节点比较

转载 作者:行者123 更新时间:2023-12-03 16:43:23 25 4
gpt4 key购买 nike

我的 XML 代码(包含酒吧和人员):

<document>
<pubs>
<pub id="pub1">
<open>true</open>
</pub>
<pub id="pub2">
<open>false</open>
</pub>
</pubs>
<people>
<person>
<name>John</name>
<pubId>pub1</pubId>
</person>
<person>
<name>Paul</name>
<pubId>pub2</pubId>
</person>
</people>
</document>

使用来自 <person> 的引用至 <pub> ( person/pubId 引用 pub[@id] )。酒吧本身有一个 bool 值 <open> (说明酒吧是打开还是关闭)。

使用 XSLT,我希望能够 count()可以去酒吧的人数。为了去酒吧,酒吧必须有 <open> true 的值.

我无法编写的两种可能的解决方案:
  • 遍历人员并跟踪人数:
    <xsl:for-each select="person">
    <xsl:variable name="pId" select="pubId" />

    <xsl:if test="root()/document/pubs/pub[@pubId=$pId]/open = 'true'" >
    <!-- any way to keep track of this number? -->
    </xsl:if>
    </xsl:for-each>
  • 直接使用 count() 函数:
    <count>
    <xsl:value-of select="count(//person[root()/document/pubs/pub[@id = pubId]/open = 'true'])" />
    </count>

  • 第二个选项似乎更简洁和正确,但我无法让它工作。

    有任何想法吗?

    最佳答案

    使用这个 XPath 1.0 单行 :

    count(/*/people/person[pubId = /*/pubs/pub[open = 'true']/@id])

    这将返回 person 的计数本文档中至少有一个 pubId 的元素 child 这样有一个 pubid 的元素属性的字符串值等于 pubId和谁的 open child 的字符串值为字符串 "true" .

    这是一个基于 XSLT 的验证 :
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>

    <xsl:template match="/">
    <xsl:copy-of select=
    "count(/*/people/person[pubId = /*/pubs/pub[open = 'true']/@id])"/>
    </xsl:template>
    </xsl:stylesheet>

    当此转换应用于提供的 XML 文档时 :
    <document>
    <pubs>
    <pub id="pub1">
    <open>true</open>
    </pub>
    <pub id="pub2">
    <open>false</open>
    </pub>
    </pubs>
    <people>
    <person>
    <name>John</name>
    <pubId>pub1</pubId>
    </person>
    <person>
    <name>Paul</name>
    <pubId>pub2</pubId>
    </person>
    </people>
    </document>

    计算 Xpath 表达式并将计算结果复制到输出:
    1

    关于xml - XSLT count() 包括引用节点比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12211518/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com