XSLT 解析 XML 并在每个父段之后写出一个带有换行符的平面文件

XSLT to parse XML and write out a flat file with a line feed after each parent segment

我是 xslt 的新手,想用它从下面的 xml 输入中写出一个平面文件。

我还需要在每个父段之后换行

所以这个:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:test xmlns:ns0="urn:mynamespace.com:test">
   <Header>
      <OderId>9876</OderId>
      <CustomerNo>Cust123</CustomerNo>
      <Item>
         <Product>N1234565</Product>
         <SubItem>
            <DelDate>20220601</DelDate>
            <Quantity>10</Quantity>
         </SubItem>
         <SubItem>
            <DelDate>20220602</DelDate>
            <Quantity>5</Quantity>
         </SubItem>
      </Item>
      <Item>
         <Product>N54321</Product>
         <SubItem>
           <DelDate>20220701</DelDate>
           <Quantity>3</Quantity>
         </SubItem>
         <SubItem>
            <DelDate>20220702</DelDate>
            <Quantity>17</Quantity>
         </SubItem>
      </Item>
   </Header>
</ns0:test>

需要制作这个:

9876Cust123
N1234565
2022060110
202206025
N54321
202207013
2022070217

我会有比这更多的字段,但只需要写出每个父项中的所有内容,不想指定每个字段。

谢谢 理查德

A​​FAICT,你想做:

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
    <xsl:for-each select="//*[*/text()]">
        <xsl:value-of select="*/text()"/>
        <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

请注意,这需要支持 XSLT 2.0 或更高版本的处理器。
XSLT 1.0 中,您可以这样做:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
    <xsl:for-each select="//*[*/text()]">
        <xsl:for-each select="*/text()">
            <xsl:value-of select="."/>
        </xsl:for-each>
        <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

不确定这种将不相关的数据混在一起的格式有什么用。