xslt转换:创建一个文本文件

时间:2016-07-04 18:34:29

标签: 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>
            <asd>12434F</asd>
            <def>wert</def>
            <childtag>
                <asdf>1233</asdf>
                <qwe>567</qwe>
            </childtag>
        </mainTag>
    </soapenv:Body>
</soapenv:Envelope>

以下是我的XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" omit-xml-declaration="yes" indent="no"/>

    <xsl:template match="mainTag">
        <xsl:result-document href="foo.txt" method="text">
            01|<xsl:value-of select="abc"/>|<xsl:value-of select="asd"/>|<xsl:value-of select="childtag/asdf"/>|
            02|<xsl:value-of select="def"/>|<xsl:value-of select="childtag/asdf"/>|
            03|<xsl:value-of select="def"/>|<xsl:value-of select="childtag/qwe"/>|<xsl:value-of select="childtag/asdf"/>| | 
        </xsl:result-document>
    </xsl:template>
</xsl:stylesheet>

以下是从xslt以上生成的输出 enter image description here

下面是包含xslt输出数据的文本文件 enter image description here

我遇到了如何删除文件中的空格(上面屏幕截图中提到的屏幕截图)

1 个答案:

答案 0 :(得分:0)

从输出中消除空格的一种方法是从样式表中删除它们。而不是:

    <xsl:template match="mainTag">
        <xsl:result-document href="foo.txt" method="text">
            01|<xsl:value-of select="abc"/>|<xsl:value-of select="asd"/>|<xsl:value-of select="childtag/asdf"/>|
            02|<xsl:value-of select="def"/>|<xsl:value-of select="childtag/asdf"/>|
            03|<xsl:value-of select="def"/>|<xsl:value-of select="childtag/qwe"/>|<xsl:value-of select="childtag/asdf"/>| | 
        </xsl:result-document>
    </xsl:template>

使用:

<xsl:template match="mainTag">
<xsl:result-document href="foo.txt" method="text">01|<xsl:value-of select="abc"/>|<xsl:value-of select="asd"/>|<xsl:value-of select="childtag/asdf"/>|
02|<xsl:value-of select="def"/>|<xsl:value-of select="childtag/asdf"/>|
03|<xsl:value-of select="def"/>|<xsl:value-of select="childtag/qwe"/>|<xsl:value-of select="childtag/asdf"/>| |</xsl:result-document>
</xsl:template>

注意缺少缩进。这个,以及:

<xsl:strip-space elements="*"/>

将产生所需的结果。

当然,使用xsl:text指令输出文字文本会更方便,例如:

<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="mainTag">
    <xsl:result-document href="foo.txt" method="text">
        <xsl:text>01|</xsl:text>
        <xsl:value-of select="abc"/>
        <xsl:text>|</xsl:text>
        <xsl:value-of select="asd"/>
        <xsl:text>|</xsl:text>
        <xsl:value-of select="childtag/asdf"/>
        <xsl:text>|&#10;02|</xsl:text>
        <xsl:value-of select="def"/>
        <xsl:text>|</xsl:text>
        <xsl:value-of select="childtag/asdf"/>
        <xsl:text>|&#10;03|</xsl:text>
        <xsl:value-of select="def"/>
        <xsl:text>|</xsl:text>
        <xsl:value-of select="childtag/qwe"/>
        <xsl:text>|</xsl:text>
        <xsl:value-of select="childtag/asdf"/>
        <xsl:text>| |</xsl:text>
    </xsl:result-document>
</xsl:template>

</xsl:stylesheet>