1

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

我希望它生成以下内容:

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

2 回答 2

2

这类似于未设置 Java JAXB NamespacePrefixMapper 时的情况。如果您声明命名空间 uri 和前缀,那么将使用正确的前缀(或无前缀)和命名空间 uri 生成 XML。Check in XML Spy 有一个设置命名空间前缀的选项。

于 2011-07-06T22:42:08.427 回答
0

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

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

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

于 2011-07-11T15:16:13.547 回答