【发布时间】:2017-06-27 16:08:06
【问题描述】:
在我的 java 程序中,我使用下面的 XSLT 代码来转换 xmls:
`
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*[descendant::text() or descendant-or-self::*/@*[string()]]">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*[string()]">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
`
这正在正确执行所需的转换,但它通过插入双引号 <?xml version="1.0" encoding="UTF-8"?> 而不是原来的单引号 <?xml version='1.0' encoding='UTF-8'?> 来更改 XML 声明
我想知道如何在格式化的 xml 中保留这些单引号!
【问题讨论】:
-
这两个声明是完全相同的 XML,所以它没有改变任何东西。
-
@jon-hanna 我明白这一点,但是在响应格式化后我有严格的 java 代码转换。这就是我想保留单引号的原因。有没有办法做到这一点?
-
@SaurabhBhoomkar,那是什么样的“严格的 Java 代码转换”?如果您使用 XML 工具处理 XML,那么他们当然不会抱怨 XML 声明中的引号字符是双引号。 XSLT 处理器不保留任何引号字符,无论是 XML 声明(甚至不是其数据模型的一部分)还是 XML 属性中的引号字符,它使用 XML 解析器将 XML 输入解析为输入树,将其转换为结果树并序列化结果树。
-
听起来您的“严格的 java 代码转换”太严格了,因为它们需要使用特定的 XML 子集。这是非常糟糕的做法。