我需要一些关于不同上下文的点击和文本检查来提取正确的值。
我已经做了内部,但没有适当的工作。
下面的XML:
<?xml version="1.0" encoding="UTF-8"?>
<ORDERS05>
<IDOC BEGIN="1">
<E1EDP01 SEGMENT="1">
<E1EDP05 SEGMENT="1">
<KOTXT>Total item price</KOTXT>
<KRATE>20.55</KRATE>
</E1EDP05>
</E1EDP01>
<E1EDP01 SEGMENT="1">
<E1EDP05 SEGMENT="1">
<KOTXT>Total item price</KOTXT>
<KRATE>8.03</KRATE>
</E1EDP05>
</E1EDP01>
<E1EDP01 SEGMENT="1">
<E1EDP05 SEGMENT="1">
<KOTXT>Total item price</KOTXT>
<KRATE>99999999</KRATE>
</E1EDP05>
<E1EDP05 SEGMENT="1">
<KOTXT>Total net price</KOTXT>
<KRATE>9.80</KRATE>
</E1EDP05>
</E1EDP01>
<E1EDP01 SEGMENT="1">
<E1EDP05 SEGMENT="1">
<KOTXT>Total item price</KOTXT>
<KRATE>100000</KRATE>
</E1EDP05>
</E1EDP01>
<E1EDP01 SEGMENT="1">
<E1EDP05 SEGMENT="1">
<KOTXT>Total item price</KOTXT>
<KRATE>10.32</KRATE>
</E1EDP05>
<E1EDP05 SEGMENT="1">
<ALCKZ>-</ALCKZ>
<KOTXT>Discount</KOTXT>
</E1EDP05>
<E1EDP05 SEGMENT="1">
<KOTXT>Total net price</KOTXT>
<KRATE>9.80</KRATE>
</E1EDP05>
</E1EDP01>
</IDOC>
</ORDERS05>基本上,规则是,在子节点E1EDP05中,如果标签KOTXT包含“总项目价格”,则从KRATE提取值。
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<request>
<import>
<fields>
<xsl:for-each select="//E1EDP01">
<Line>
<UnitPriceGross fid="7053">
<xsl:value-of select="//E1EDP05[KOTXT='Total item price']/KRATE"/>
</UnitPriceGross>
</Line>
</xsl:for-each>
</fields>
</import>
</request>
</xsl:template>
</xsl:stylesheet>目前的结果:
<?xml version="1.0" encoding="UTF-8"?>
<request>
<import>
<fields>
<Line>
<UnitPriceGross fid="7053">20.55</UnitPriceGross>
</Line>
<Line>
<UnitPriceGross fid="7053">20.55</UnitPriceGross>
</Line>
<Line>
<UnitPriceGross fid="7053">20.55</UnitPriceGross>
</Line>
<Line>
<UnitPriceGross fid="7053">20.55</UnitPriceGross>
</Line>
<Line>
<UnitPriceGross fid="7053">20.55</UnitPriceGross>
</Line>
</fields>
</import>
</request>正确的结果应该是手风琴的值,而不仅仅是对于第一个K值(20.55)。
正确结果:
<?xml version="1.0" encoding="UTF-8"?>
<request>
<import>
<fields>
<Line>
<UnitPriceGross fid="7053">20.55</UnitPriceGross>
</Line>
<Line>
<UnitPriceGross fid="7053">8.03</UnitPriceGross>
</Line>
<Line>
<UnitPriceGross fid="7053">99999999</UnitPriceGross>
</Line>
<Line>
<UnitPriceGross fid="7053">100000</UnitPriceGross>
</Line>
<Line>
<UnitPriceGross fid="7053">10.32</UnitPriceGross>
</Line>
</fields>
</import>
</request>谢谢你的任何想法。
致以亲切的问候,
发布于 2022-09-02 09:49:47
您使用的是不正确的XPath选择器insinde xsl:value-of:在这里,您希望匹配当前迭代的E1EDP01上下文节点的E1EDP05元素子代,但是使用的//运算符匹配文档根的每个E1EDP05子代。
您应该通过显式添加上下文节点来更改它,使其成为相对节点,如下所示:
.//E1EDP05[KOTXT='Total item price']/KRATE查看完整的结果:http://xsltransform.net/bEzknsQ
另请参阅:
https://stackoverflow.com/questions/73580288
复制相似问题