2011-07-06 4 views
1

私はXMLスパイを使用してXSDからXMLファイルを自動的に生成しています。しかし、常にルート要素にn1:またはn2:を付けているようです。それはXSDからXMLファイルを生成すると、ルートノードで不要なプレフィックスが発生する

<?xml version="1.0"?> 
<n2:EmployeeData> 
    <Employee> 
    <name>xyz</name> 
    <dateOfBirth>10.10.10</dateOfBirth> 
    <email>[email protected]</email> 
    </Employee> 
</n2:EmployeeData> 

私は、次の生成にそれをしたいと思い、次のようなものを生成します:JavaのJAXB NamespacePrefixMapperに設定されていない場合と同様です

<?xml version="1.0"?> 
<EmployeeData> 
    <Employee> 
    <name>xyz</name> 
    <dateOfBirth>10.10.10</dateOfBirth> 
    <email>[email protected]</email> 
    </Employee> 
</EmployeeData> 
+3

最初の例は無効なXMLです。生成されません。 'ns2'プレフィックスを定義する必要があります。 – skaffman

答えて

2

。名前空間URIと接頭辞を宣言すると、XMLは正しい接頭辞(または接頭辞なし)と名前空間URIで生成されます。チェックインXML Spyには、名前空間接頭辞を設定するオプションがあります。

+0

私のXSDには既にtargetNamespaceが定義されています。 targetNamespace = "http://www.mycompany.com/XMLSchema/XYZ"ただし、このURLをコピーしてIEに貼り付けると、ページが見つかりませんでした。これが私の問題を引き起こしていると思いますか? – MTH

+0

@MTHいいえ、おそらくそうではありません。何らかの形でXMLSpyにドキュメント内のデフォルトネームスペースをネームスペースにしたい、つまり 'xmlns =" mycompany.com/XMLSchema/XYZ "ルートに挿入する必要があることを伝える必要があります。 –

0

まず、名前空間はXMLの基本概念です。名前空間についてよく知らない人は、時間をかけて学び理解してください。名前空間はURIであるにもかかわらず、既存のWebページを指す必要はありません。それらは一意の識別子です。

XMLスキーマにはターゲット名前空間があるため、インスタンス文書のルート要素はその名前空間に存在する必要があります。必要に応じて、インスタンスドキュメント内に他の名前空間接頭辞を使用することもできます。接頭辞を必要なターゲット名前空間URIにバインドする名前空間定義もあることを確認してください。 @skaffmanがコメントしたように、あなたが投稿したXMLは、接頭辞から名前空間へのマッピングなしで名前空間接頭辞を使用するため、実際には整形式ではありません。あなたの問題に対処する別の方法は、接頭辞を削除し、ルート要素でデフォルトの名前空間を定義することです。インスタンス・ドキュメントが名前空間に含まれていない場合は、スキーマが正しくないため、targetNamespace属性を削除して修正する必要があります。

ところで、ドキュメントでは、ルート要素のみが名前空間に属しています。これは一般的な方法ではありません。この場合、そのような結果は、スキーマ文書の意図しない機能によって引き起こされたと思います。デフォルトでは、スキーマ文書内でグローバルに宣言されている要素のみがターゲット名前空間に入ります。これは、<xs:schema>要素のelementFormDefault="qualified"属性を設定することで変更できます。この属性は、このスキーマでローカルに宣言された要素もターゲット名前空間に属していることを確認します。その属性のデフォルト値はfalseで、属性がない場合に適用されます。

関連する問題