从XSD生成XML文件会在根节点上产生不需要的前缀

从XSD生成XML文件会在根节点上产生不需要的前缀,xml,xsd,xml-namespaces,xmlspy,Xml,Xsd,Xml Namespaces,Xmlspy,我使用XMLSpy从XSD自动生成XML文件。然而,它似乎总是在我的根元素前面加上n1:或n2:的前缀,例如,它将生成如下内容 <?xml version="1.0"?> <n2:EmployeeData> <Employee> <name>xyz</name> <dateOfBirth>10.10.10</dateOfBirth> <email>a@a.com&l

我使用XMLSpy从XSD自动生成XML文件。然而,它似乎总是在我的根元素前面加上n1:或n2:的前缀,例如,它将生成如下内容

<?xml version="1.0"?>
<n2:EmployeeData>
   <Employee>
     <name>xyz</name>
     <dateOfBirth>10.10.10</dateOfBirth>
     <email>a@a.com</email>
   </Employee>
</n2:EmployeeData>

xyz
10.10.10
a@a.com
我希望它生成以下内容:

<?xml version="1.0"?>
<EmployeeData>
   <Employee>
     <name>xyz</name>
     <dateOfBirth>10.10.10</dateOfBirth>
     <email>a@a.com</email>
   </Employee>
</EmployeeData>

xyz
10.10.10
a@a.com

未设置类似于Java中的JAXB NamespacePrefixMapper。若您声明名称空间uri和前缀,那个么XML将使用正确的前缀(或并没有前缀)和名称空间uri生成。签入XML Spy有一个设置名称空间前缀的选项。

首先:名称空间是XML中的一个基本概念。如果您不熟悉名称空间,请花时间学习和理解它们。即使名称空间是URI,它们也不需要(但可以)指向任何现有网页。它们只是唯一的标识符

由于XML模式具有目标命名空间,因此实例文档的根元素必须位于该命名空间中。如果需要,可以在实例文档中使用其他名称空间前缀,只需确保还具有将前缀绑定到所需目标名称空间URI的名称空间定义。与@skaffman评论的一样,您发布的XML实际上格式不好,因为它使用了名称空间前缀,而没有前缀到名称空间的映射。处理问题的另一种方法是删除前缀并在根元素中定义默认名称空间。如果您的实例文档不应位于任何名称空间中,那么您的架构不正确,应该通过删除
targetNamespace
属性来修复它


顺便说一下,在文档中,只有根元素属于名称空间。这不是一种常见的做法,我猜在这种情况下,这样的结果是由模式文档中的无意特性造成的。默认情况下,只有在架构文档中全局声明的元素才会位于目标命名空间中。这可以通过在
元素上设置
elementFormDefault=“qualified”
属性来更改。此属性确保在此架构中本地声明的元素也属于目标命名空间。该属性的默认值为false,如果缺少该属性,则会应用该值。

您的第一个示例是无效的XML,它不会生成该值。必须定义
ns2
前缀。My XSD已经定义了targetNamespace,例如targetNamespace=”“。然而,当我复制并粘贴这个url到IE中时,我得到一个页面未找到错误。你认为这就是我的问题的原因吗?@MTH不,可能不是。不知何故,您需要告诉XMLSpy您希望文档中的默认名称空间成为您的名称空间,也就是说,它应该插入根
xmlns=“mycompany.com/XMLSchema/XYZ”