XSLT到IDoc-XML到纯文本文件

时间:2017-10-11 07:28:08

标签: xml xslt ido

最近我有一个要求,我需要将Idoc-xml转换为纯文本.txt文件并转移到外部合作伙伴。我是这个XSLT编程的新手,所以任何示例或链接都会非常有用。

我的XML看起来像这样:

<info>
	<Segment1>
		<Segment2>
			<Segment3>
				<PO>876522</PO>
			</Segment3>
			<Segment4>
				<Date>20171224</Date>
			</Segment4>
			<Segment5>
				<Invoice>312</Invoice>
			</Segment5>
		</Segment2>
	</Segment1>
	<Segment6>
		<Segment7>
			<Material>435-A90</Material>
			<Quatity>7</Quatity>
			<Price>12.00</Price>
			<Expiry>01.12.2020</Expiry>
			<Item>780AD09</Item>
			<Descp>Pencil-56AP</Descp>
		</Segment7>
	</Segment6>
	<Segment6>
		<Segment7>
			<Material>901-K78</Material>
			<Quatity>7</Quatity>
			<Price>12.00</Price>
			<Expiry>25.01.2028</Expiry>
			<Item>90KL76Y</Item>
			<Descp>Rubber-90AP</Descp>
		</Segment7>
	</Segment6>
	<Segment6>
		<Segment7>
			<Material>123-65D</Material>
			<Quatity>10</Quatity>
			<Price>67.00</Price>
			<Expiry>01.01.2020</Expiry>
			<Item>LOERF90</Item>
			<Descp>Pen-19EU</Descp>
		</Segment7>
	</Segment6>
</info>

我的预期输出:

876522|24.12.2017|312|435-A90|7|12.00|01.12.2020|780AD09|Pencil-56AP
876522|24.12.2017|312|901-K78|7|12.00|25.01.2028|90KL76Y|Rubber-90AP
876522|24.12.2017|312|123-65D|10|67.00|01.01.2020|LOERF90|Pen-19EU

我需要在项目级别上循环,即“段6”。 非常感谢你。

1 个答案:

答案 0 :(得分:0)

试试这个

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:output method="text"></xsl:output>

    <xsl:template match="/">
        <xsl:for-each select="//Segment6">
            <xsl:if test="position() != 1"><xsl:text>&#xA;</xsl:text></xsl:if>
            <xsl:value-of select="//Segment3/PO"/>
            <xsl:text>|</xsl:text>
            <xsl:value-of select="//Segment4/replace(Date, '([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])', '$3.$2.$1')"/>
            <xsl:text>|</xsl:text>
            <xsl:value-of select="//Segment5/Invoice|Segment7/*" separator="|"/>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>