我正在尝试通过Groovy获取xml(xsd)文件的命名空间。 XmlParsers返回的节点和XmlSlurper返回的GPathResult似乎忽略了命名空间定义。
举个例子:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
尝试通过
获取rootNode的属性rootNode.attributes()
仅检索:
targetNamespace:http://www.w3schools.com
elementFormDefault:qualified
并省略 xml:ns 和 xmlns 定义。同样的结果包含在GPathResult的@属性中。
似乎这与Node类实现无关,并且依赖于使用的XmlParsers。
那么如何实现XmlParser以在节点中包含这些属性,以及任何原因都不在Groovy之外?
答案 0 :(得分:1)
使用XmlSlurper
constructor的其他变体:
def xml = """<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
</xs:schema>
"""
assert new XmlSlurper(false, false, false).parseText(xml).attributes() == [
'xmlns:xs':'http://www.w3.org/2001/XMLSchema',
'targetNamespace':'http://www.w3schools.com',
'xmlns':'http://www.w3schools.com',
'elementFormDefault':'qualified'
]