如果我的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)是标识互联网资源的字符串。
因此,因为“使用URI的目的是给命名空间一个唯一的名称”,这是否意味着命名空间URI必须是一个URL (同样,没有提到我绝对无法理解的URN,这意味着我无法设置这样的命名空间:
xlmns:foo="A_random_but_unique_string"
我会从同一个链接完成这个引用:
命名空间“http://www.w3.org/1999/XSL/Transform”标识HTML文档中的XSLT元素
所以现在这意味着解析器肯定必须使用命名空间URL来查找信息(命名空间的元素),不是吗?
答案 0 :(得分:1)
它与解析URL(和下载模式)无关。尽管两个示例中的XML看起来都相同:“xsl:stylesheet”,但您的输入将被读取为stylesheet
元素(由名称空间https://www.w3schools.com/xml/xml_namespaces.asp
标识)。
Java程序需要一个stylesheet
元素(由名称空间http://www.w3.org/1999/XSL/Transform
标识),但由于它无法找到它,因此会引发异常。