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
我会有比这更多的字段,但只需要写出每个父项中的所有内容,不想指定每个字段。
谢谢
理查德
AFAICT,你想做:
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> </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> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
不确定这种将不相关的数据混在一起的格式有什么用。
我是 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
我会有比这更多的字段,但只需要写出每个父项中的所有内容,不想指定每个字段。
谢谢 理查德
AFAICT,你想做:
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> </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> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
不确定这种将不相关的数据混在一起的格式有什么用。