【发布时间】:2017-02-27 18:42:54
【问题描述】:
我需要根据 E1EDP01 - POSEX 和 ACTION 从 SAP 中对以下 XML 进行排序,其余的 xml 应按原样复制。请注意,E1EDP01 下有 E1EDP19,也应照原样复制。我的 XSLT 不工作,因为我不确定模板匹配的值应该是什么。请帮忙。
<ORDERS05>
<IDOC BEGIN="1">
<E1EDK14 SEGMENT="1">
<QUALF>014</QUALF>
<ORGID>PF01</ORGID>
</E1EDK14>
<E1EDP01 SEGMENT="1">
<POSEX>00020</POSEX>
<ACTION>001</ACTION>
<PSTYP>0</PSTYP>
<MENGE>540.000</MENGE>
<MENEE>RO</MENEE>
<E1EDP19>
<Text> Test 2 </Text>
</E1EDP19>
</E1EDP01>
<E1EDP01 SEGMENT="1">
<POSEX>00030</POSEX>
<ACTION>001</ACTION>
<PSTYP>1</PSTYP>
<MENGE>140.000</MENGE>
<MENEE>AD</MENEE>
<E1EDP19>
<Text> Test 1 </Text>
</E1EDP19>
</E1EDP01>
<E1EDS01 SEGMENT="1">
<SUMID>002</SUMID>
<SUMME>832.2</SUMME>
<SUNIT>USD</SUNIT>
</E1EDS01>
</IDOC>
</ORDERS05>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<!-- -->
<xsl:strip-space elements="*"/>
<!-- -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- -->
<xsl:template match="E1EDP01">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="POSEX">
<xsl:sort select="POSEX" order="descending" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Expected Result
<ORDERS05>
<IDOC BEGIN="1">
<E1EDK14 SEGMENT="1">
<QUALF>014</QUALF>
<ORGID>PF01</ORGID>
</E1EDK14>
<E1EDP01 SEGMENT="1">
<POSEX>00030</POSEX>
<ACTION>001</ACTION>
<PSTYP>1</PSTYP>
<MENGE>140.000</MENGE>
<MENEE>AD</MENEE>
<E1EDP19>
<Text> Test 1 </Text>
</E1EDP19>
</E1EDP01>
<E1EDP01 SEGMENT="1">
<POSEX>00020</POSEX>
<ACTION>001</ACTION>
<PSTYP>0</PSTYP>
<MENGE>540.000</MENGE>
<MENEE>RO</MENEE>
<E1EDP19>
<Text> Test 2 </Text>
</E1EDP19>
</E1EDP01>
<E1EDS01 SEGMENT="1">
<SUMID>002</SUMID>
<SUMME>832.2</SUMME>
<SUNIT>USD</SUNIT>
</E1EDS01>
</IDOC>
</ORDERS05>
【问题讨论】:
-
那么对于您发布的输入样本,您想要哪个结果?有两个
E1EDP01,不是已经按POSEX和ACTION排序了吗? -
降序排列。
00030 应该在00020 之前 -
请至少向我们展示您想要的结果,以及 - 充其量 - 您尝试解决此问题的方法。