我是XSLT的新手。我试图将xml数据转换为制表符分隔的文本文件。我非常感谢你的帮助。
XML数据:
<?xml version="1.0" encoding="UTF-8" ?>
<xml_extract version="V1.2">
<tables>
<table name="TAB_1">
<row>
<columns>
<column name="ID" type="-5">1001410</column>
<column name="EXT_ID" type="-5">1001410</column>
<column name="LANG" type="12">en</column>
<column name="NAME" type="12">B10060601</column>
</columns>
</row>
<row>
<columns>
<column name="ID" type="-5">1001412</column>
<column name="EXT_ID" type="-5">1001412</column>
<column name="LANG" type="12">en</column>
<column name="NAME" type="12">B10141005</column>
</columns>
</row>
<row>
<columns>
<column name="ID" type="-5">1001414</column>
<column name="EXT_ID" type="-5">1001414</column>
<column name="LANG" type="12">en</column>
<column name="NAME" type="12">B10438001</column>
</columns>
</row>
</table>
</tables>
</xml_extract>
在XSLT转换之后,我想在制表符分隔的TEXT(不是XML)中输出以下内容:
ID EXT_ID LANG NAME
1001410 1001410 en B10060601
1001412 1001412 en B10141005
1001414 1001414 en B10438001
提前致谢,
困难的部分是输出列标题。除了硬编码列标题,我在下面尝试过。
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<!-- Headers -->
<xsl:for-each select="//columns[1]/column">
<xsl:value-of select="@name"/>
<xsl:text>	</xsl:text> <!-- tab delimited -->
</xsl:for-each>
<xsl:text>
</xsl:text> <!-- new line -->
<!-- Data -->
<xsl:for-each select="//columns/column">
<xsl:value-of select="."/>
<xsl:choose>
<xsl:when test="not(@name='NAME')">
<xsl:text>	</xsl:text> <!-- tab delimited -->
</xsl:when>
<xsl:when test="@name='NAME'">
<xsl:text>
</xsl:text> <!-- new line -->
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
结果:
ID EXT_ID LANG NAME ID EXT_ID LANG NAME ID EXT_ID LANG NAME
1001410 1001410 en B10060601
1001412 1001412 en B10141005
1001414 1001414 en B10438001
答案 0 :(得分:1)
您需要将xsl:for-each
更改为此选项以获取列标题
<xsl:for-each select="(//columns)[1]/column">
您之前的表达式实际上是在每个父元素下首次出现columns
。也就是说,对于每个row
元素,它将获得它之前的第一个columns
元素。