gpt4 book ai didi

xml - XSLT 计算子节点

转载 作者:数据小太阳 更新时间:2023-10-29 01:44:45 25 4
gpt4 key购买 nike

我很少使用 XLST,当我尝试计算父节点中的子节点时会得到令人困惑的结果。

编辑:

XML 的结构如下:

<?xml version="1.0"?>
<Response>
<result>
<name>Someone</name>
**<rating>4.5</rating>**
<review>
<text>Some review.</text>
</review>
<review>
<text>Another review.</text>
</review>
</result>
<result>
<name>Another one</name>
**<rating>2</rating>**
<review>
<text>Blah, grieve, blah.</text>
</review>
<review>
<text>Blah, grrrrr, blah.</text>
</review>
<review>
<text>Blah, good grrrrr, blah.</text>
</review>
</result>
...
...
</Response>

模板(简体)如下:

**<body>
<xsl:apply-templates/>
</body>**

<xsl:template match="Response/result">
<div class="item">
<div class="name">
<xsl:value-of select="name"/>
</div>
<xsl:if test="rating">
<span class="review-count">
**(<xsl:value-of select="count(review)"/>)**
</span>
</xsl:if>
</div>
</xsl:template>

我没有通过这种方法获得正确的子节点数。除了 count(review) 之外,我还尝试了 count(descendant::review) 和几个 xPath 变体。我知道我错过了一些简单的东西 - 但是什么?

最佳答案

<xsl:if test="rating">
<span class="review-count">
**(<xsl:value-of select="count(review)"/>)**
</span>
</xsl:if>

这将永远不会生成一个字符,因为在提供的 XML 文档中没有 rating 元素。如果您删除上述条件指令,则结果将包含所需的计数值。

如果您确实有至少一些 review 元素的 rating 子级(但未能向我们展示),那么您可能也没有展示其他重要部分XML 文档的定义——例如默认 namespace 。

更新:

OP 提供了一个更精确的 XML 文档,其中包含 rating 元素。

我无法重现问题

此 XSLT 转换:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="Response/result">
<div class="item">
<div class="name">
<xsl:value-of select="name"/>
</div>
<xsl:if test="rating">
<span class="review-count">
**(<xsl:value-of select="count(review)"/>)**
</span>
</xsl:if>
</div>
</xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<Response>
<result>
<name>Someone</name>
<rating>4.5</rating>
<review>
<text>Some review.</text>
</review>
<review>
<text>Another review.</text>
</review>
</result>
<result>
<name>Another one</name>
<rating>2</rating>
<review>
<text>Blah, grieve, blah.</text>
</review>
<review>
<text>Blah, grrrrr, blah.</text>
</review>
<review>
<text>Blah, good grrrrr, blah.</text>
</review>
</result>
...
...
</Response>

产生想要的、正确的结果:

  <div class="item">
<div class="name">Someone</div>
<span class="review-count">
**(2)**
</span>
</div>

<div class="item">
<div class="name">Another one</div>
<span class="review-count">
**(3)**
</span>
</div>
...
...

关于xml - XSLT 计算子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150454/

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