首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >xsl:for的逻辑不清楚

xsl:for的逻辑不清楚
EN

Stack Overflow用户
提问于 2014-02-11 18:05:01
回答 4查看 48关注 0票数 0

输入:-

代码语言:javascript
运行
复制
<b>
<cac:OrderLine>

        <cac:LineItem>
            <cbc:ID>1</cbc:ID>
                <cbc:Quantity unitCode="KGM">100</cbc:Quantity>
                    <cbc:TotalTaxAmount currencyID="GBP">17.50</cbc:TotalTaxAmount>
            <cac:Price>
                <cbc:PriceAmount currencyID="GBP">100.00</cbc:PriceAmount>
                 <cbc:BaseQuantity unitCode="KGM">1</cbc:BaseQuantity>
            </cac:Price>
            </cac:LineItem>
                 </cac:OrderLine>
<cac:OrderLine>
    <cac:LineItem>
            <cbc:ID>5</cbc:ID>
                <cbc:Quantity unitCode="KGM">300</cbc:Quantity>
                    <cbc:TotalTaxAmount currencyID="GBP">100.50</cbc:TotalTaxAmount>
            <cac:Price>
                <cbc:PriceAmount currencyID="GBP">2000.00</cbc:PriceAmount>
                 <cbc:BaseQuantity unitCode="KGM">52</cbc:BaseQuantity>
            </cac:Price>
            </cac:LineItem>
                 </cac:OrderLine>

实际上,这是输入结构,如果我们像这样应用循环

代码语言:javascript
运行
复制
<xsl:for-each select="b/OrderLine/LineItem">

它应该只选择第一个行项目,但它选择了输入中存在的所有行项目?有人能在这里解释一下xsl:for-each的功能吗?

因为循环应该应用于upto to Order本身,但上面编写的代码如何挑选输入文件中存在的所有行项目

EN

回答 4

Stack Overflow用户

发布于 2014-02-11 18:12:16

如果您只关注第一个LineItem,请不要使用xsl:for-each。使用

代码语言:javascript
运行
复制
<xsl:template match="b/OrderLine/LineItem[1]">
    ....
</xsl:template>

顾名思义,for-each处理与select表达式匹配的每一项

票数 1
EN

Stack Overflow用户

发布于 2014-02-11 19:07:40

非常具体地回答你的问题:

1)你没有提到在哪里

代码语言:javascript
运行
复制
<b>

即将结束

2)如果您的xpath选择了所有节点,那么它肯定是文档的根节点。

3) <xsl:for-each select="b/OrderLine/LineItem">

名称本身证明了逻辑将应用于xpath所指向的"EACH“元素

票数 1
EN

Stack Overflow用户

发布于 2014-02-11 18:09:37

你的XPath会说:“找到所有的b节点,然后是所有的OrderLine节点,然后是所有的LineItem节点。是的,这是预期的功能。”

旁注:你应该使用模板而不是for-each。(ForEach是开发人员从其他语言使用XSLT时所使用的语言。)

如果您只需要每个OrderLine中的第一个LineItem节点,则快速修改为:

代码语言:javascript
运行
复制
<xsl:for-each select="b/OrderLine/LineItem[1]">

Playground

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21698664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档