2016-08-17 12 views
0

XSDからXMLファイルを生成するために、Eclipseでinbuilt機能を使用しています。 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. あなたは、単一のXSDで を宣言し、両方の名前空間(addressbookと子孫)と 非名前空間(employeedepartment、など)のコンポーネントを持つことはできません - あなたはxsd:importを使用する必要があります。

あなたのXSDに上記の修復を行わなくても、正しいXMLが生成されることは期待できません。

+0

私はこのスキーマがデータベースエントリになるため、別のXSDを宣言してインポートするオプションはありません。それは、私はこれらの情報をUIで表示するためにサードパーティのシステムを使用しているようです。彼らはXMLを読んでデータを表示します。 UIユーザーがコンテンツを変更すると、アプリケーションはDBからスキーマをフェッチし、変更された値で新しいXMLを作成します。私はそのシステムを変更することはできません。したがって、私が持っているオプションは、すべての要素に対してデフォルトのスキーマを使用するようにXMLを変更することだけです。 – Renjith

+1

システムで、異なる名前空間に対して2つのスキーマ文書をスキーマに持つことができない場合は、 xs:importはこれを実現するための方法なので、複数の名前空間のドキュメントインスタンスです。 –

関連する問題