基于子节点文本的 SORT XML [英] SORT XML based on Child Node text

查看:30
本文介绍了基于子节点文本的 SORT XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个像这样的 XML

I have a XMLLike this

<GLLines DataTypeID="GEN" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
  <GLLine>
  <SYS_COMPANY_CODE>NB</SYS_COMPANY_CODE> 
  <ACCT_DOC_NUM>12720829</ACCT_DOC_NUM> 
  <ACCT_DOC_LINE>22114739</ACCT_DOC_LINE> 
  </GLLine>
   <GLLine>
  <SYS_COMPANY_CODE>NB</SYS_COMPANY_CODE> 
  <ACCT_DOC_NUM>12720827</ACCT_DOC_NUM> 
  <ACCT_DOC_LINE>22114740</ACCT_DOC_LINE> 
  </GLLine>
   <GLLine>
  <SYS_COMPANY_CODE>NB</SYS_COMPANY_CODE> 
  <ACCT_DOC_NUM>12720830</ACCT_DOC_NUM> 
  <ACCT_DOC_LINE>22114739</ACCT_DOC_LINE> 
  </GLLine>
   <GLLine>
  <SYS_COMPANY_CODE>NB</SYS_COMPANY_CODE> 
  <ACCT_DOC_NUM>12720830</ACCT_DOC_NUM> 
  <ACCT_DOC_LINE>22114738</ACCT_DOC_LINE> 
  </GLLine>
</GLLines>

我想根据acct DOC NUM和acct doc行进行排序.我尝试过XSLT,但我不知道该怎么做.所以我得到了错误的答案

I want to sort according to the acct DOC NUM and acct doc line .I tried XSLT but I don't know how to do it .so I'm getting wrong answer

推荐答案

从一个 身份转换开始,它只是将输入复制到输出不变.

Start with an identity transformation that just copies the input to output unchanged.

<xsl:template match="@*|node()">
  <xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>

现在您可以为 GLLines 元素添加特定模板以对其子元素进行排序

Now you can add a specific template for the GLLines element to sort its children

<xsl:template match="GLLines">
  <xsl:copy>
    <xsl:apply-templates select="GLLine">
      <!-- sort first on the ACCT_DOC_NUM -->
      <xsl:sort select="ACCT_DOC_NUM" data-type="number" order="ascending" />
      <!-- for lines with the same doc num, sort by line -->
      <xsl:sort select="ACCT_DOC_LINE" data-type="number" order="ascending" />
    </xsl:apply-templates>
  </xsl:copy>
</xsl:template>

这篇关于基于子节点文本的 SORT XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆