首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT - FOR提取值的不同上下文

XSLT - FOR提取值的不同上下文
EN

Stack Overflow用户
提问于 2022-09-02 09:14:42
回答 1查看 20关注 0票数 0

我需要一些关于不同上下文的点击和文本检查来提取正确的值。

我已经做了内部,但没有适当的工作。

下面的XML:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<ORDERS05>
    <IDOC BEGIN="1">
        <E1EDP01 SEGMENT="1">
            <E1EDP05 SEGMENT="1">
                <KOTXT>Total item price</KOTXT>
                <KRATE>20.55</KRATE>
            </E1EDP05>
        </E1EDP01>
        <E1EDP01 SEGMENT="1">
            <E1EDP05 SEGMENT="1">
                <KOTXT>Total item price</KOTXT>
                <KRATE>8.03</KRATE>
            </E1EDP05>
        </E1EDP01>
        <E1EDP01 SEGMENT="1">
            <E1EDP05 SEGMENT="1">
                <KOTXT>Total item price</KOTXT>
                <KRATE>99999999</KRATE>
            </E1EDP05>
            <E1EDP05 SEGMENT="1">
                <KOTXT>Total net price</KOTXT>
                <KRATE>9.80</KRATE>
            </E1EDP05>
        </E1EDP01>
        <E1EDP01 SEGMENT="1">
            <E1EDP05 SEGMENT="1">
                <KOTXT>Total item price</KOTXT>
                <KRATE>100000</KRATE>
            </E1EDP05> 
        </E1EDP01>
        <E1EDP01 SEGMENT="1"> 
            <E1EDP05 SEGMENT="1">
                <KOTXT>Total item price</KOTXT>
                <KRATE>10.32</KRATE>
            </E1EDP05>
            <E1EDP05 SEGMENT="1">
                <ALCKZ>-</ALCKZ>
                <KOTXT>Discount</KOTXT>
            </E1EDP05>
            <E1EDP05 SEGMENT="1">
                <KOTXT>Total net price</KOTXT>
                <KRATE>9.80</KRATE>
            </E1EDP05>      
        </E1EDP01>
    </IDOC>
</ORDERS05>

基本上,规则是,在子节点E1EDP05中,如果标签KOTXT包含“总项目价格”,则从KRATE提取值。

XSLT:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
   <xsl:template match="/">
      <request>
         <import>
            <fields>
               <xsl:for-each select="//E1EDP01">
                  <Line>
                    <UnitPriceGross fid="7053">
                         <xsl:value-of select="//E1EDP05[KOTXT='Total item price']/KRATE"/>
                     </UnitPriceGross>
                  </Line>
               </xsl:for-each>
            </fields>
         </import>
      </request>
   </xsl:template>
</xsl:stylesheet>

目前的结果:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<request>
   <import>
      <fields>
         <Line>
            <UnitPriceGross fid="7053">20.55</UnitPriceGross>
         </Line>
         <Line>
            <UnitPriceGross fid="7053">20.55</UnitPriceGross>
         </Line>
         <Line>
            <UnitPriceGross fid="7053">20.55</UnitPriceGross>
         </Line>
         <Line>
            <UnitPriceGross fid="7053">20.55</UnitPriceGross>
         </Line>
         <Line>
            <UnitPriceGross fid="7053">20.55</UnitPriceGross>
         </Line>
      </fields>
   </import>
</request>

正确的结果应该是手风琴的值,而不仅仅是对于第一个K值(20.55)。

正确结果:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<request>
   <import>
      <fields>
         <Line>
            <UnitPriceGross fid="7053">20.55</UnitPriceGross>
         </Line>
         <Line>
            <UnitPriceGross fid="7053">8.03</UnitPriceGross>
         </Line>
         <Line>
            <UnitPriceGross fid="7053">99999999</UnitPriceGross>
         </Line>
         <Line>
            <UnitPriceGross fid="7053">100000</UnitPriceGross>
         </Line>
         <Line>
            <UnitPriceGross fid="7053">10.32</UnitPriceGross>
         </Line>
      </fields>
   </import>
</request>

谢谢你的任何想法。

致以亲切的问候,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-02 09:49:47

您使用的是不正确的XPath选择器insinde xsl:value-of:在这里,您希望匹配当前迭代的E1EDP01上下文节点的E1EDP05元素子代,但是使用的//运算符匹配文档根的每个E1EDP05子代。

您应该通过显式添加上下文节点来更改它,使其成为相对节点,如下所示:

代码语言:javascript
复制
.//E1EDP05[KOTXT='Total item price']/KRATE

查看完整的结果:http://xsltransform.net/bEzknsQ

另请参阅:

https://www.w3.org/TR/xpath-10/#path-abbrev:~:text=//para%20selects%20all%20the%20para%20descendants%20of%20the%20document%20root%20and%20thus%20selects%20all%20para%20elements%20in%20the%20same%20document%20as%20the%20context%20node

https://www.w3.org/TR/xpath-10/#path-abbrev:~:text=.//para%20selects%20the%20para%20element%20descendants%20of%20the%20context%20node

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

https://stackoverflow.com/questions/73580288

复制
相关文章

相似问题

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