2016-08-17 77 views
0

我在eclipse中使用內置功能從XSD生成XML文件。 XML必須如下所示生成,'addressbook'在不同的命名空間下。在XSD元素中聲明命名空間屬性

<employee xmlns:ns2="urn:employees_2014_1.lists.webservices.test.com"> 
    <department>8029</department> 
    <emailAddress>[email protected]</emailAddress> 
    <employeeAddressBookList> 
     <ns2:addressbook> 
      <ns2:addressee>BC</ns2:addressee> 
      <ns2:addr1>A1</ns2:addr1> 
      <ns2:addr2>A2</ns2:addr2> 
      <ns2:city>C1</ns2:city> 
      <ns2:state>ST1</ns2:state> 
      <ns2:zip>10001</ns2:zip> 
     </ns2:addressbook> 
    </employeeAddressBookList> 
    <employeeId>000001</employeeId> 
</employee> 

我的XSD如下所示。

<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <xsd:element name="employee"> 
     <xsd:complexType> 
      <xsd:sequence> 
      <xsd:element name="department" type="xsd:int" /> 
      <xsd:element name="emailAddress" type="xsd:string" /> 
      <xsd:element name="employeeAddressBookList"> 
       <xsd:complexType> 
       <xsd:sequence> 
        <xsd:element name="ns2:addressbook"> 
        <xsd:complexType> 
         <xsd:sequence> 
         <xsd:element name="ns2:addressee" type="xsd:string" /> 
         <xsd:element name="ns2:addr1" type="xsd:string" /> 
         <xsd:element name="ns2:addr2" type="xsd:string" /> 
         <xsd:element name="ns2:city" type="xsd:string" /> 
         <xsd:element name="ns2:state" type="xsd:string" /> 
         <xsd:element name="ns2:zip" type="xsd:int" /> 
         </xsd:sequence> 
        </xsd:complexType> 
        </xsd:element> 
       </xsd:sequence> 
       </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="employeeId" type="xsd:int" /> 
      </xsd:sequence> 
<xsd:attribute name="xmlns:ns2" type="xs:string" /> 
     </xsd:complexType> 
     </xsd:element> 
    </xsd:schema> 

這生成了一個沒有命名空間值的XML。

<employee xmlns:ns2=""> 
    <department>8029</department> 
    <emailAddress>[email protected]</emailAddress> 
    <employeeAddressBookList> 
     <ns2:addressbook> 
      <ns2:addressee>BC</ns2:addressee> 
      <ns2:addr1>A1</ns2:addr1> 
      <ns2:addr2>A2</ns2:addr2> 
      <ns2:city>C1</ns2:city> 
      <ns2:state>ST1</ns2:state> 
      <ns2:zip>10001</ns2:zip> 
     </ns2:addressbook> 
    </employeeAddressBookList> 
    <employeeId>000001</employeeId> 
</employee> 

我講的這條線......

<employee xmlns:ns2=""> 

我如何增加價值的命名空間?

回答

1

這XSD有其令人驚訝的是你從中得到任何XML這麼多的問題:

  1. 空間聲明都沒有屬性。
  2. 元素@name屬性值必須是NCNAME(不含名稱空間 前綴)。
  3. 不能兼得命名空間(addressbook和後代)和 非命名空間(employeedepartment等),在一個單一的XSD聲明 組件 - 你需要使用xsd:import

沒有(至少)對XSD進行上述修復,您不能指望從中生成正確的XML。

+0

這很奇怪..我沒有選擇聲明和導入另一個XSD,因爲這個模式將成爲一個數據庫條目。這就像我正在使用第三方系統在UI上顯示這些信息。他們將讀取XML並顯示數據。如果用戶界面用戶修改了內容,應用程序將從數據庫中獲取模式,並創建一個具有修改值的新XML。我無法改變這個系統。因此,我唯一的選擇是將XML更改爲對所有元素使用默認模式。 – Renjith

+1

如果您的系統不允許您在模式中有兩個模式文檔,對於不同的命名空間,那麼它不允許您擁有一個多名字空間文檔實例,因爲xs:import是實現這一目的的唯一方式。 –