2013-04-12 56 views
0

我有一個XSD,用於將我的域對象序列化爲XML。我使用StreamingMarkupBuilder生成XML,但我希望能夠從XSD中提取名稱空間以用於構建XML。我見過的大多數例子都沒有使用XSD,從XSD創建JAXB類,或者只使用XSD進行驗證。我認爲有一種Groovy方法來處理XSD以提取用於創建XML的命名空間信息,但我沒有找到它。有任何想法嗎?如何從XSD中提取命名空間?

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

可您發佈的XSD? – Will

回答

0

我猜你正在使用XmlParser從你的XSD獲取信息。要獲得名稱空間,請實例化XmlParserwithout 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'