2011-07-06 41 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,如果该属性缺失,则应用该属性。