我是xslt的新手,下面是xml输入
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ser="http://xyz.com.zr/l8q/12Q/service/">
<soapenv:Header>
<ser:User>
<!-- comment -->
<Username/>
<password/>
</ser:User>
</soapenv:Header>
<soapenv:Body>
<mainTag>
<abc>1596056</abc>
<asdd>12434F</asdd>
<childtag>
<asdf>1233</asdf>
<qwe>567</qwe>
</childtag>
</mainTag>
</soapenv:Body>
</soapenv:Envelope>
以下是所需的输出(文本)
01|1596056|12434F
02|1233| |567|
总而言之,想要实现所需的输出,需要知道以下细节
1) how can i make the text output from xslt.
2) how to make/avoid newline (i.e break).
3) how to generate spaces in text.
以下是逻辑
01 = this is line number in the text (first line)
1596056 = <abc>
12434F = <asdd>
02 = this is line number in the text (second line)
1233 = <asdf>
567 = <qwe>
由于
答案 0 :(得分:0)
你的逻辑有点不一致,但我不打算详述。相反,我已经编写了一个产生输出的xsl并回答了你的目标1)2)和3)。我在相关代码点嵌入了评论。
这些是xslt的基本概念,所以如果你不能遵循它,我建议你做一些关于使用xslt的背景阅读。有很多资源可以解决这个问题。http://www.w3schools.com让人想起来,但当然网络上会有更多资源。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<!-- 1) output method is "text" -->
<xsl:output method="text" version="1.0" encoding="UTF-8"/>
<!-- identity transform, apply templates without output -->
<xsl:template match="@*|node()">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<!-- matches on soap envolpe body Body for the namespace http://schemas.xmlsoap.org/soap/envelope/ -->
<xsl:template match="s:Body">
<!-- list of tags that you want to count -->
<xsl:apply-templates select="mainTag | mainTag/childtag "/>
</xsl:template>
<xsl:template match="mainTag">
<!-- output context position from within nodeset specified with the apply-templates above-->
<xsl:value-of select="concat('0',position())"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="abc"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="asdd"/>
<!-- 2) new line using entity -->
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="childtag">
<xsl:value-of select="concat('0',position())"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="asdf"/>
<!-- 3) you can include a space within the xsl:text -->
<xsl:text>| |</xsl:text>
<xsl:value-of select="qwe"/>
<xsl:text>|</xsl:text>
<!-- 2) new line using entity -->
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>