我是XSLT的新手。在我的任务之一中,我必须将XML文件转换为具有特定格式的文本文件。我想知道是否有一种简单/快捷的方法来完成它。
我的XML如下所示
<?xml version="1.0" encoding="UTF-8"?>
<QTKTRes xmlns="http://www.xxx.com/app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creationDateTime="2013-03-19T15:40:58-05:00" transLanguage="EN" baseLanguage="EN" messageID="1363722058486545315" appVersion="5 1 20110725-1550" rsStart="0" rsCount="1" rsTotal="1">
<TKTSet>
<TKT>
<COST>0.0</COST>
<HRS>0.0</HRS>
<CHANGEDATE>2013-02-19T14:59:51-05:00</CHANGEDATE>
<TKTID>101</TKTID>
<TKTSPEC>
<ATTRID>PMSCR</ATTRID>
<REID>101</REID>
<VALUEN>RDPS</VALUE>
</TKTSPEC>
<TKTSPEC>
<ATTRID>PMSCQ</ATTRID>
<REID>101</REID>
<VALUET>RDPQ</VALUE>
</TKTSPEC>
<TKT>
<TKTSet>
</QTKTRes>
`
我需要的输出如下: -
COST=0.0&
HRS=0.0&
CHANGEDATE=2013-02-19T14:59:51-05:00&
TKTID=101&
TKTSPEC.1.ATTRID=PMSCR&
TKTSPEC.1.REID=101&
TKTSPEC.1.VALUEN=RDPS&
TKTSPEC.2.ATTRID=PMSCR&
TKTSPEC.2.REID=101&
TKTSPEC.2.VALUET=RDPQ
是否有我可以使用的工具,或者我需要手动编写XSLT样式表。我是这个领域的新手。欢迎您提出宝贵的答案。
答案 0 :(得分:1)
如果您只想列出TKT
的子元素及其节点名称后跟=
,它们的值以及除最后一行之外的所有行的&
,这应该有效:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:app="http://www.xxx.com/app">
<xsl:output method="text" />
<xsl:strip-space elements="*" />
<xsl:template match="app:TKT//*">
<xsl:param name="prefix" />
<xsl:param name="inLast" select="true()" />
<xsl:value-of select="concat($prefix, local-name(), '=', normalize-space())"/>
<xsl:if test="not($inLast) or position() != last()">
<xsl:text>&
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="app:TKT//*[*]">
<xsl:param name="inLast" select="true()" />
<xsl:variable name="num">
<xsl:number />
</xsl:variable>
<xsl:apply-templates>
<xsl:with-param name="prefix"
select="concat(local-name(), '.', $num, '.')" />
<xsl:with-param name="inLast"
select="$inLast and position() = last()" />
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
在样本输入上运行时,会产生:
COST=0.0&
HRS=0.0&
CHANGEDATE=2013-02-19T14:59:51-05:00&
TKTID=101&
TKTSPEC.1.ATTRID=PMSCR&
TKTSPEC.1.REID=101&
TKTSPEC.1.VALUE=RDPS&
TKTSPEC.2.ATTRID=PMSCQ&
TKTSPEC.2.REID=101&
TKTSPEC.2.VALUE=RDPQ