我对Saxon的XSLT处理器有一个奇怪的问题(最新版本=9.?)
给定这个伪造的XML(不管它是什么):
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="urn:bogus">bogus</root>
使用此XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<x:transform version="2.0"
xmlns:x="http://www.w3.org/1999/XSL/Transform"
xmlns:b="urn:bogus"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:foobar"
xpath-default-namespace="urn:foobar"
exclude-result-prefixes="#all">
<x:output method="xml" indent="yes" encoding="UTF-8" />
<x:template match="b:root">
<foo xsi:type="xs:string"><x:value-of select="."/></foo>
</x:template>
</x:transform>
将实际删除xmlns:xs=”http://www.w3.org/2001/XMLSchema“来自结果XML的声明,因为排除结果前缀=#all”。显然,发生这种情况是因为它在属性值中使用,而不是在元素或属性中使用。
删除排除结果前缀="#all"或手动指定要删除的前缀确实有效。
这是预期的行为吗?我猜处理器将所有属性值视为随机字符串,并且没有考虑它们的命名空间(它甚至没有注意到它有一个我假设的)。
像xsi:type这样的众所周知的属性应该有特殊的行为吗?
我不认为http://www.w3.org/TR/xslt20/#namespace-fixup要求处理器检查类型名称的属性值,因为它说:
命名空间修复不用于为元素或属性内容中出现的xs:QName或xs:NOTATION值创建命名空间声明。
当值获得验证结果等类型时,命名空间修正不会起作用,因为命名空间修正发生在验证之前:在这种情况下,用户有责任确保被验证的元素具有所需的命名空间节点,以使验证成功。
基于此,我想说样式表作者有责任确保xs前缀绑定到URIhttp://www.w3.org/2001/XMLSchema。
2)如果我按照下面的方式编辑package-info,那么它是很好的,但是问题是我创建的是一个JAXB整数元素如下所示,前缀删除没有应用于这些元素
这是我的输入xml
问题内容: 我喜欢ElementTree解析xml的方式,特别是Xpath功能。我从带有嵌套标签的应用程序以xml输出。 我想按名称访问此标签,而不指定名称空间,这可能吗?例如: 代替: 问题答案: 至少使用lxml2,可以稍微减少此开销:
如何更改pandas数据框的列标签: 到
问题内容: 我有一个使用默认名称空间打印的文件。元素以ns2前缀打印,我需要将其删除,以及与我的代码的关系: 我希望它是: 这就是我的编码方式,据我所知,这足以使ns2消失: 生成的package-info结果如下: 我创建如下文件: generateClassesPackage是其中package-info.java及其元素所在的包。 Foo对象已定义,并具有以下元素: 我错过了吗?还是我误解了
我有从一个模式创建的JAXB对象。在封送过程中,使用NS2对xml元素进行注释。对于这个问题,我已经尝试了网络上存在的所有选项,但没有一个可行。我不能修改我的模式或更改package-info.java。请帮忙