Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于子节点文本对XML进行排序_Xml_Sorting_Xslt - Fatal编程技术网

基于子节点文本对XML进行排序

基于子节点文本对XML进行排序,xml,sorting,xslt,Xml,Sorting,Xslt,我有一个像这样的孩子 <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>221

我有一个像这样的孩子

<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>

铌
12720829
22114739
铌
12720827
22114740
铌
12720830
22114739
铌
12720830
22114738
我想根据acct DOC NUM和acct DOC行进行排序。我尝试了XSLT,但不知道如何进行排序。因此我得到了错误的答案

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
  <xsl:template match="@*|node()">  
    <xsl:copy>
      <xsl:apply-templates select="@*|node()">
        <xsl:sort select="ACCT_DOC_NUM"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

从一个标识转换开始,该转换只会将输入复制到输出,而不会改变

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

我试过了,但没能做到。我无法以XML格式检索和排序。你能发布你的xsl吗?它仍然作为文本而不是XML显示。我在IET中打开它仍然作为文本而不是XML显示。我在IET中打开这是我在XML文档@user2945777中提供的。如果您在浏览器中进行转换,那么您可能需要将其转换为某种HTML表示,而不是简单地重新排序原始XML。如果没有样式表,浏览器将只显示XML树结构,提供样式表后,浏览器会假定您正在将XML转换为它知道如何正确呈现的内容。我通过vbscript进行了转换,但仍然不起作用。您是否知道是否有方法在返回XML的API调用期间自动执行此操作?
<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>