首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT,如何根据节点的位置从重新发生的节点中获取元素并填充架构。

XSLT,如何根据节点的位置从重新发生的节点中获取元素并填充架构。
EN

Stack Overflow用户
提问于 2017-11-19 23:13:40
回答 1查看 37关注 0票数 0

输入XML:

代码语言:javascript
复制
<lines>
  <line>
     <accountings>
      <accounting>
        <account>
          <seg1>value1</seg2>
        </account>
      </accounting>
      <accounting>
        <account>
          <seg1>value2</seg2>
        </account>
      </accounting>
    </accountings>
  </line>
  <line>
    <accountings>
     <accounting>
        <account>
          <seg1>value3</seg2>
        </account>
     </accounting>
    </accountings>
  </line>
  <line>
     <account>
        <seg1>value4</seg1>
     </account>
  </line>
</lines>

OutPut XML:我必须迭代元素,找出段的出现,并根据存在的帐户数。创建具有相应值的相同数量的元素

代码语言:javascript
复制
<item>
  <id>1</id>
  <vname>value1</vname>
</item>
<item>
  <id>2</id>
  <vname>value2</vname>
</item>
<item>
  <id>3</id>
  <vname>value3</vname>
</item>
<item>
  <id>4</id>
  <vname>value4</vname>
</item>

得到这个解决方案的最佳方法是什么。

下面是我不完整的XSLT。我试图从每次迭代中存储帐户数据。我没有在这段代码中循环,因为我已经很困惑了。请帮助并完成我的XSLT。

代码语言:javascript
复制
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/">
<xsl:output method="xml" omit-xml-declaration="yes" media-type="string"/>
<xsl:template match="/">
 <xsl:variable name="SegmentData" as="element()*">
   <xsl:call-template name="CheckSegment">
     <xsl:with-param name = "vaccount" select="./*:lines/*:line/*:accountings/*:accounting/*:account"/>
   </xsl:call-template>
 </xsl:variable>
  <xsl:element name="item">
    <xsl:element name="id">
        <xsl:value-of select="position()"/>
    </xsl:element>
    <xsl:element name="vname">
        <xsl:value-of select="$SegmentData/*:vnum"/>
    </xsl:element>
  </xsl:element>
 </xsl:template>
 <xsl:template name="CheckSegment" as="element()*">
    <xsl:param name = "vaccount"/>
   <xsl:element name="vnum">
                    <xsl:value-of select="$vaccount/*:seg1"/>
                </xsl:element>
 </xsl:template>    
</xsl:stylesheet>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-20 08:24:34

据我所见,这只是

代码语言:javascript
复制
<xsl:template match="/">
  <xsl:for-each select="//seg1">
    <item>
      <id><xsl:value-of select="position()"/></id>
      <vname><xsl:value-of select="."/></vname>
    </item>
  </xsl:for-each>
</xsl:template>

如果我在需求中遗漏了什么,那么您需要更清楚地解释它。(例如,您所说的“填充模式”是什么意思?)

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

https://stackoverflow.com/questions/47383043

复制
相关文章

相似问题

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