【问题标题】:xslt transformation : create a text filexslt 转换:创建一个文本文件
【发布时间】:2016-11-06 12:43:58
【问题描述】:

下面是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生成的输出

以下是包含来自 xslt 输出的数据的文本文件

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

【问题讨论】:

  • 感谢您向我们展示您的内容。现在,你的问题是什么?
  • 我想将 xslt 结果输出写入文本文件到目录中
  • 您使用的是什么处理器? Saxon 或 xsltproc 在命令行接收输入和输出文件路径作为参数。此外,任何通用语言(C#、Java、PHP、Python)都可以将转换后的结果保存到文件中。请务必指定&lt;xsl:output method="text" omit-xml-declaration="yes" indent="no"/&gt;
  • xsltproc 你可以考虑一下
  • 问题已编辑,需要帮助删除 xslt 输出的文件中的空格

标签: xslt


【解决方案1】:

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

    <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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-27
    • 2018-12-19
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    相关资源
    最近更新 更多