Java 使用Saxon通过XSLT生成URL

Java 使用Saxon通过XSLT生成URL,java,xml,url,xslt,saxon,Java,Xml,Url,Xslt,Saxon,我正在尝试使用Saxon 9通过XSLT从基本XML文件生成URL。但是,生成的URL将用于GET HTTP请求(在生成之后通过Java执行),并将包含用于分隔参数的符号(“&”) 我编写XSLT来进行转换,这在使用Eclipse进行测试时起作用 代码:&;月份= 但是,使用Saxon和Java运行相同的XSLT文件时,其行为并不相同。而是插入转义码&编码到生成的URL中 我尝试使用XSLT变量,但结果是一样的。以下两种尝试均无效 我还看到C#的一个解决方案是使用一个值为的变量&

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

我编写XSLT来进行转换,这在使用Eclipse进行测试时起作用

代码:&;月份=

但是,使用Saxon和Java运行相同的XSLT文件时,其行为并不相同。而是插入转义码
&编码到生成的URL中

我尝试使用XSLT变量,但结果是一样的。以下两种尝试均无效

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

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

如果这是不可能的(由于XML不允许使用未替换的符号),Eclipse如何生成它,而Saxon却不能

是否可以通过XSLT生成一个未替换的符号AND

如果不使用
禁用输出转义
(这只能在XSLT引擎负责序列化输出XML树时起作用,例如,当输出是DOM时,它将被忽略),如果可以,则生成的输出将不是XML,下游组件将无法解析它

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

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

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

请确切告诉我们您正试图使用Saxon创建什么样的结果,是纯文本文档(
output method=“text”
)还是HTML文档(
output method=“HTML”
)还是XML文档(
output method=“XML”
)?在HTML或XML中,需要对符号进行转义。对不起,我忘记指定了。结果将是一个XML文档。是的,我知道,通常情况下,需要逃逸安培数。这就是为什么我问为什么Eclipse使用相同的XSLT文档生成非转义的符号。它使用的是不同的XSL引擎,还是不符合XML标准?非常感谢。我不知道XML解析器会自动转换,因为当我使用toString()方法显示整个节点时,它会将符号显示为
&。但是得到子对象和文本内容后,它会按照我的需要显示符号和。再次感谢。正如Ian所说,用XML表示符号的正确方法是
&,无论它位于URI中还是其他任何位置。如果使用Saxon序列化程序生成输出,禁用转义将生成未转义的“&”,但是未转义的“&”通常会导致下游错误,除非所需的格式不是真正的XML。