0

如果我的 XSL 具有以下标题,则不会出现错误:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

但是,如果我更改 xsl 命名空间 URI...:

<xsl:stylesheet version="1.0" xmlns:xsl="https://www.w3schools.com/xml/xml_namespaces.asp"

...我收到一个错误:

javax.xml.transform.TransformerConfigurationException 

我想我不理解命名空间 URI 的概念,因为我认为它可以是任何 URL(更不用说 URN),只要它在 XML/XSL 文档中是唯一的。明显不是。我试图改变 URI 来测试这个理论。


https://www.w3schools.com/xml/xml_namespaces.asp,我们可以阅读以下语句:

解析器不使用命名空间 URI 来查找信息。

使用 URI 的目的是给命名空间一个唯一的名称。

然而,公司经常使用命名空间作为指向包含命名空间信息的网页的指针。

第一条语句的意思是我们不关心URI指向的网页是什么,那为什么我不能将它设置为指向我想要的任何页面,甚至是不存在的页面呢?为什么它必须特别是http://www.w3.org/1999/XSL/Transform

此外,稍后在上述链接中,我们可以阅读:

统一资源标识符 (URI) 是标识 Internet 资源的字符串。

所以,正因为如此,并且因为“使用 URI 的目的是给命名空间一个唯一的名称”,这是否意味着命名空间 URI 必须是一个 URL(再次,更不用说我绝对无法理解的 URN ),这意味着我不能像这样设置命名空间:

xlmns:foo="A_random_but_unique_string"

我将从同一个链接中引用这个引用:

命名空间“ http://www.w3.org/1999/XSL/Transform ”标识 HTML 文档中的 XSLT 元素

所以现在这意味着解析器必须使用命名空间 URL 来查找信息(命名空间的元素),不是吗?

4

1 回答 1

1

它与解析 URL(和下载模式)无关。尽管两个示例中的 XML 看起来相同:“xsl:stylesheet”,但您的输入被读取为stylesheet元素(由 namespace 标识https://www.w3schools.com/xml/xml_namespaces.asp)。

Java 程序需要一个stylesheet元素(由 namespace 标识http://www.w3.org/1999/XSL/Transform),但是由于找不到它,它会引发异常。

于 2017-08-07T16:42:58.373 回答