命名空间

时间:2013-03-04 19:52:37

标签: xslt xpath-2.0

我已经创建了一个XSLT样式表文档。在本文档中,我创建了一个新的XML文档,如下所述:

...
<CREATE_REQ
            xsi:schemaLocation="http://fcubs.ofss.com/service/aServices theService.xsd"
            xmlns="http://fcubs.ofss.com/service/aServices"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...

转换后(见下文)命名空间的顺序是不同的。普通的XML解析器可以处理这个问题,通常没问题。我的问题是接收应用程序无法处理这个问题,命名空间的顺序可能也就不应该改变。

<CREATE_REQ xmlns="http://fcubs.ofss.com/service/aServices"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://fcubs.ofss.com/service/aServices theService.xsd">

...

是否存在不会更改名称空间的函数或声明?

2 个答案:

答案 0 :(得分:4)

如果接收应用程序无法处理它,则需要修复它。谁写了它似乎并没有掌握XML的全部内容。修复接收应用程序,或将其扔到它所属的bin中。

答案 1 :(得分:1)

  

转换后(见下文)命名空间的顺序是   不同。

不,订购完全相同。根据W3C XPath 1.0 Data Model

元素的属性节点和命名空间节点出现在元素的子节点之前。 命名空间节点定义为在属性节点之前发生。

这意味着虽然在提供的XML片段中,属性xmlns:xsi 似乎位于命名空间声明之前,但实际上它遵循它们。

因此,生成的输出不会更改原始XML文档的名称空间和属性的顺序。

生成一个XML文档,其中属性在命名空间节点之前会违反上面引用的定义,因此兼容的XSLT处理器不会生成这样的文档