如何从XSD中提取命名空间?

时间:2013-04-12 17:09:57

标签: xml groovy xsd

我有一个XSD,我想将我的域对象序列化为XML。我正在使用StreamingMarkupBuilder生成XML,但我希望能够从XSD中提取名称空间以用于构建XML。我见过的大多数示例要么不使用XSD,要么从XSD创建JAXB类,要么只使用XSD进行验证。我认为有一种Groovy方法来处理XSD以提取用于创建XML的命名空间信息,但我还没有找到它。有什么想法吗?

def xmlBuilder = new StreamingMarkupBuilder()
def xmlString = xmlBuilder.bind {
  mkp.declareNamespace(ns: extractedFromXSD)
  ...

1 个答案:

答案 0 :(得分:0)

我猜你正在使用XmlParser从你的XSD获取信息。要获取命名空间,请实例化XmlParser without validation neither namespace-awarenessnew XmlParser(false, false)

我在w3schools中使用了剥离的xsd example

xml = '''<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="shiporder">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="orderperson" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="orderid" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>
</xs:schema>'''

xsd = new XmlParser(false, false).parseText xml

assert xsd.'@xmlns:xs' == 'http://www.w3.org/2001/XMLSchema'