通过XmlSlurper / XmlParser从xsd文件中获取名称空间xmlns的名称

时间:2015-05-06 15:24:21

标签: groovy xsd xml-parsing

我正在尝试通过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之外?

1 个答案:

答案 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'
]