2011-07-06 42 views
1

我正在使用XML spy從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> 

我想它生成以下產生類似到:

<?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

也就是說當類似Java中JAXB NamespacePrefixMapper未設置爲。如果你聲明瞭名稱空間uri和前綴,那麼將使用正確的前綴(或沒有前綴)和命名空間uri來生成XML。簽入XML Spy有一個設置命名空間前綴的選項。

+0

我的XSD已經有一個targetNamespace,例如targetNamespace =「http://www.mycompany.com/XMLSchema/XYZ」。但是,當我複製並粘貼到IE瀏覽器的這個網址,我得到一個頁面未找到錯誤。你認爲這是什麼可能導致我的問題? – MTH

+0

@MTH不,可能不是。不知何故,你需要告訴XMLSpy你需要文檔中的默認名稱空間到你的名字空間 - 也就是說,它應該插入到根目錄xmlns =「mycompany.com/XMLSchema/XYZ」中。 –

0

首先:名稱空間是XML中的一個基本概念。如果您不熟悉命名空間,請花時間學習並理解它們。即使命名空間是URI,它們也不需要(但可以)指向任何現有的網頁。它們只是唯一的標識符。

由於您的XML Schema具有目標名稱空間,因此實例文檔的根元素必須位於該名稱空間中。如果需要,您可以在實例文檔中使用其他一些名稱空間前綴,只要確保您也有一個名稱空間定義,將您的前綴綁定到所需的目標名稱空間URI。就像@skaffman所評論的那樣,你發佈的XML實際上並不是格式良好的,因爲它使用的命名空間前綴沒有前綴到名稱空間的映射。處理您的問題的另一種方法是刪除前綴並在根元素中定義默認名稱空間。如果您的實例文檔不應位於任何名稱空間中,則您的模式不正確,應通過刪除targetNamespace屬性來解決該問題。

順便說一下,在您的文檔中,只有根元素屬於一個名稱空間。這不是一種常見的做法,我猜在這種情況下,這樣的結果是由模式文檔中的無意識特徵造成的。默認情況下,只有架構文檔中全局聲明的元素將位於目標名稱空間中。這可以通過在<xs:schema>元素上設置elementFormDefault="qualified"屬性來更改。此屬性確保在此模式中本地聲明的元素也屬於目標名稱空間。該屬性的默認值爲false,如果該屬性缺失,則應用該屬性。