java - 使用 Saxon 通过 XSLT 生成 URL

标签 java xml url xslt saxon

我正在尝试使用 Saxon 9 通过 XSLT 从基本 XML 文件生成 URL。但是,生成的 URL 将用于 GET HTTP 请求(在生成之后通过 Java 执行),并且将包含与号 (' &') 来分隔参数。

我编写了 XSLT 来进行转换,在使用 Eclipse 进行测试时有效。

代码:<xsl:text disable-output-escaping="yes">&amp;month=</xsl:text>

但是,使用 Saxon 和 Java 运行相同的 XSLT 文件时,其行为并不相同。相反,它会插入转义码 &amp;进入生成的 URL。

我尝试使用 XSLT 变量,但结果是相同的。以下尝试均无效。

<xsl:variable name="and"><![CDATA[&]]></xsl:variable>

<xsl:variable name="and" select="'&'" />

我还看到 C# 的一个解决方案是使用一个值为 &amp;amp; 的变量。 ,但这在 Java 中除了按字面意思将该文本插入到生成的 URL 中之外没有任何作用。

所以我的问题是:是否可以通过 XSLT 生成未转义的 & 符号?或者我是否必须生成一个转义字符串,然后在 Java 中进行替换?

如果不可能(由于 XML 不允许未转义的 & 符号),那么 Eclipse 为何能够生成它,而 Saxon 却不能?

最佳答案

is it possible to have an unescaped ampersand generated via XSLT?

不使用disable-output-escaping(并且只有当XSLT引擎负责序列化输出XML树时才有效,例如,当输出是DOM时它将被忽略),如果可以,那么您生成的输出将不是 XML,并且您的下游组件将无法解析它。

但无论如何都没有必要,因为如果您有一个 XML 文档

<url>http://example.com/query?year=2013&amp;month=12</url>

然后,当您使用 XML 解析器读取文档时,您将得到的 url 元素的值是未转义的 http://example.com/query?year=2013&month= 12. .您无需关心 url 在 XML 序列化中如何表示,您从解析器中获得的值将是您期望的值。

关于java - 使用 Saxon 通过 XSLT 生成 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20421946/

相关文章:

java - 使用 log4j 登录 Java Web Start

c++ - 通过Qt读取xml

xml - 如何打开 XML Schema Explorer

python 库从网站获取内容(http 文本)?

python - 使用 Python 下载 URL 中未明确引用的文档

java - 不同项目中的相同java包

java - 错误: If a primary key is annotated with autoGenerate,其类型必须是int、Integer、long或Long

java - 配置 JBoss 和 Apache 进行远程调试

java - 仅在 xml 文件中删除标签之间的空格的正则表达式是什么?

ruby - 单一嵌套资源的正确路线