首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT 1.0:排序节点更改结构

XSLT 1.0:排序节点更改结构
EN

Stack Overflow用户
提问于 2012-03-30 22:22:57
回答 1查看 389关注 0票数 0

我有以下简化的XML结构:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<INVOIC02>
<IDOC BEGIN="1">
    <EDI_DC40 SEGMENT="1">
        <TABNAM>EDI_DC40</TABNAM>
    </EDI_DC40>
    <E1EDP01 SEGMENT="1">
        <MENGE>1.000</MENGE>
        <E1EDP19 SEGMENT="1">
            <QUALF>002</QUALF>
            <IDTNR>000000000000718221</IDTNR>
            <KTEXT>Orange</KTEXT>
        </E1EDP19>
        <E1EDP19 SEGMENT="1">
            <QUALF>Z03</QUALF>
            <IDTNR>7610400013079</IDTNR>
        </E1EDP19>
    </E1EDP01>
    <E1EDP01 SEGMENT="1">
        <MENGE>1.000</MENGE>
        <E1EDP19 SEGMENT="1">
            <QUALF>002</QUALF>
            <IDTNR>000000000000718160</IDTNR>
            <KTEXT>Pistache</KTEXT>
        </E1EDP19>     
        <E1EDP19 SEGMENT="1">
            <QUALF>003</QUALF>
            <IDTNR>7610400181600</IDTNR>
        </E1EDP19>
    </E1EDP01>
    <E1EDP01 SEGMENT="1">
        <MENGE>1.000</MENGE>
        <E1EDP19 SEGMENT="1">
            <QUALF>002</QUALF>
            <IDTNR>000000000000718228</IDTNR>
            <KTEXT>Strawberry</KTEXT>
        </E1EDP19>
        <E1EDP19 SEGMENT="1">
            <QUALF>003</QUALF>
            <IDTNR>7610400182287</IDTNR>
        </E1EDP19>
    </E1EDP01>
    <E1EDP01 SEGMENT="1">
        <MENGE>1.000</MENGE>
        <E1EDP19 SEGMENT="1">
            <QUALF>002</QUALF>
            <IDTNR>000000000000718221</IDTNR>
            <KTEXT>Orange</KTEXT>
        </E1EDP19>
        <E1EDP19 SEGMENT="1">
            <QUALF>003</QUALF>
            <IDTNR>7610400182218</IDTNR>
        </E1EDP19>
    </E1EDP01>
    <E1EDP01 SEGMENT="1">
        <MENGE>1.000</MENGE>
        <E1EDP19 SEGMENT="1">
            <QUALF>002</QUALF>
            <IDTNR>000000000000718160</IDTNR>
            <KTEXT>Pistache</KTEXT>
        </E1EDP19>
        <E1EDP19 SEGMENT="1">
            <QUALF>003</QUALF>
            <IDTNR>7610400181600</IDTNR>
        </E1EDP19>
    </E1EDP01>
    <E1EDP01 SEGMENT="1">
        <MENGE>1.000</MENGE>
        <E1EDP19 SEGMENT="1">
            <QUALF>002</QUALF>
            <IDTNR>000000000000718228</IDTNR>
            <KTEXT>Strawberry</KTEXT>
        </E1EDP19>
        <E1EDP19 SEGMENT="1">
            <QUALF>003</QUALF>
            <IDTNR>7610400182287</IDTNR>
        </E1EDP19>
    </E1EDP01>
    <E1EDS01 SEGMENT="1">
        <SUMID>001</SUMID>
        <SUMME>6</SUMME>
    </E1EDS01>
</IDOC>
</INVOIC02>

我需要使用QUALF='002‘根据<IDTNR>号对<E1EDP01 SEGMENT="1">段进行排序

所以我想出了这个XSLT:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

http://www.w3.org/1999/XSL/Transform“xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl”version="1.0">

代码语言:javascript
复制
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="IDOC">
    <xsl:apply-templates>
        <xsl:sort select="E1EDP19[QUALF='002']/IDTNR"/>
    </xsl:apply-templates>     
</xsl:template>
</xsl:stylesheet>

但在我的输出中,<E1EDP01>片段是排序的,但被放在我的结构的末尾:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<INVOIC02>
<EDI_DC40 SEGMENT="1">
    <TABNAM>EDI_DC40</TABNAM>
</EDI_DC40>
<E1EDS01 SEGMENT="1">
    <SUMID>001</SUMID>
    <SUMME>6</SUMME>
</E1EDS01>
<E1EDP01 SEGMENT="1">
    <MENGE>1.000</MENGE>
    <E1EDP19 SEGMENT="1">
        <QUALF>002</QUALF>
        <IDTNR>000000000000718160</IDTNR>
        <KTEXT>Pistache</KTEXT>
    </E1EDP19>
    <E1EDP19 SEGMENT="1">
        <QUALF>003</QUALF>
        <IDTNR>7610400181600</IDTNR>
    </E1EDP19>
</E1EDP01>
<E1EDP01 SEGMENT="1">
    <MENGE>1.000</MENGE>
    <E1EDP19 SEGMENT="1">
        <QUALF>002</QUALF>
        <IDTNR>000000000000718160</IDTNR>
        <KTEXT>Pistache</KTEXT>
    </E1EDP19>
    <E1EDP19 SEGMENT="1">
        <QUALF>003</QUALF>
        <IDTNR>7610400181600</IDTNR>
    </E1EDP19>
</E1EDP01>
<E1EDP01 SEGMENT="1">
    <MENGE>1.000</MENGE>
    <E1EDP19 SEGMENT="1">
        <QUALF>002</QUALF>
        <IDTNR>000000000000718221</IDTNR>
        <KTEXT>Orange</KTEXT>
    </E1EDP19>
    <E1EDP19 SEGMENT="1">
        <QUALF>Z03</QUALF>
        <IDTNR>7610400013079</IDTNR>
    </E1EDP19>
</E1EDP01>
<E1EDP01 SEGMENT="1">
    <MENGE>1.000</MENGE>
    <E1EDP19 SEGMENT="1">
        <QUALF>002</QUALF>
        <IDTNR>000000000000718221</IDTNR>
        <KTEXT>Orange</KTEXT>
    </E1EDP19>
    <E1EDP19 SEGMENT="1">
        <QUALF>003</QUALF>
        <IDTNR>7610400182218</IDTNR>
    </E1EDP19>
</E1EDP01>
<E1EDP01 SEGMENT="1">
    <MENGE>1.000</MENGE>
    <E1EDP19 SEGMENT="1">
        <QUALF>002</QUALF>
        <IDTNR>000000000000718228</IDTNR>
        <KTEXT>Strawberry</KTEXT>
    </E1EDP19>
    <E1EDP19 SEGMENT="1">
        <QUALF>003</QUALF>
        <IDTNR>7610400182287</IDTNR>
    </E1EDP19>
</E1EDP01>
<E1EDP01 SEGMENT="1">
    <MENGE>1.000</MENGE>
    <E1EDP19 SEGMENT="1">
        <QUALF>002</QUALF>
        <IDTNR>000000000000718228</IDTNR>
        <KTEXT>Strawberry</KTEXT>
    </E1EDP19>
    <E1EDP19 SEGMENT="1">
        <QUALF>003</QUALF>
        <IDTNR>7610400182287</IDTNR>
    </E1EDP19>
</E1EDP01>
</INVOIC02>

<E1EDS01>数据段在排序数据段之前,但应该在末尾。为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-30 23:02:48

这是因为您对所有内容进行了排序,而非E1EDP01元素将具有空的排序键。相反,你可以强制他们的立场,比如:

代码语言:javascript
复制
<xsl:template match="IDOC">
    <xsl:apply-templates select="EDI_DC40"/>
    <xsl:apply-templates select="E1EDP01">
        <xsl:sort select="E1EDP19[QUALF='002']/IDTNR"/>
    </xsl:apply-templates>     
    <xsl:apply-templates select="E1EDS01"/>
</xsl:template>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9944822

复制
相关文章

相似问题

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