XML转换-删除XML声明后的换行符

时间:2019-01-21 15:32:46

标签: xml xslt

经过XML转换后,我得到以下结果:

rollbackFor=SQLException.class

我需要将输出文件放在一行上, 类似于以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:[..]><Tag1></tag1><Tag2></Tag2>[..]</Document>

到目前为止,唯一可行的解​​决方案是不显示声明,但如果有其他选择,我宁愿不这样做。

我的XSL模板开始是这样的:

<?xml version="1.0" encoding="UTF-8"?><Document xmlns="urn:iso:std:[..]><Tag1></tag1><Tag2></Tag2>[..]</Document>

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

对于该解决方案,我省略了所用XML的名称空间。

为此,我将仅通过XPath 1.0复制所有内容,并强制XML的所述副本,而无需缩进和格式化XSLT样式表。

XML输入

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:[..]"><Tag1></Tag1><Tag2></Tag2></Document>

XSLT 1.0样式表

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:output encoding="utf-8" indent="no" method="xml" omit-xml-declaration="no"/>
    <xsl:decimal-format name="decdot" decimal-separator="."/>

    <xsl:template match="/">
        <xsl:copy-of select="/"/>
    </xsl:template>

</xsl:stylesheet>

XML输出

<?xml version="1.0" encoding="utf-8"?><Document xmlns="urn:iso:std:[..]"><Tag1/><Tag2/></Document>

答案 1 :(得分:0)

我找到了一种解决方案,看起来比橡皮筋更像实际解决方案,但是效果很好,对您来说合法吗?

我决定省略声明,然后通过如下代码强制转换手动将其写下:

<xsl:output method="xml" version="1.0" encoding="UTF-8" omit-xml-declaration="yes"/>
  <xsl:template match="/">
    <xsl:text disable-output-escaping="yes">&lt;?xml version="1.0" encoding="UTF-8"?></xsl:text>
    <Document>
      [...]
    </Document>
  </template>