从 XSD 生成 XML 文件会导致根节点上出现不需要的前缀

发布于 2024-11-19 04:59:01 字数 857 浏览 4 评论 0原文

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

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

I am using XML spy to automatically generate an XML file from an XSD. However, it always seems to prefix my root element with n1: or n2: e.g. it would generate something like to following

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

I would like it to generate the following:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

红衣飘飘貌似仙 2024-11-26 04:59:01

这与 Java JAXB NamespacePrefixMapper 未设置时类似。如果声明命名空间 uri 和前缀,则将生成具有正确前缀(或无前缀)和命名空间 uri 的 XML。签入 XML Spy 有一个用于设置命名空间前缀的选项。

That is similar to when in Java JAXB NamespacePrefixMapper is not set. If you declare namespace uri and prefix then XML will be generated with the right prefix (or no prefix) and namespace uri. Check in XML Spy has an option for setting namespace prefixes.

情深已缘浅 2024-11-26 04:59:01

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

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

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

First of all: namespaces are a fundamental concept in XML. If you are not familiar with namespaces, please take time to learn and understand them. Even though namespaces are URIs, they do not need to (but can) point to any existing web page. They are just unique identifiers.

Because your XML Schema has a target namespace, the root element of an instance document must be in that namespace. You can use some other namespace prefix in your instance document if you want, just make sure that you also have a namespace definition that binds your prefix to that required target namespace URI. Like @skaffman commented, the XML you posted is actually not well-formed, because it uses a namespace prefix without a prefix-to-namespace mapping. Another way to deal with your issue is to remove the prefix and define a default namespace in the root element. If your instance document shouldn't be in any namespace, then your schema is incorrect and it should be fixed by removing the targetNamespace attribute.

By the way, in your document only the root element belongs to a namespace. This is not a common practice and I guess that in this case such result was caused by an unintentional feature in your schema document. By default, only the elements that are declared globally in the schema document will be in the target namespace. This can be changed by setting elementFormDefault="qualified" attribute on the <xs:schema> element. This attribute makes sure that also elements that locally are declared in this schema do belong to the target namespace. The default value for that attribute is false, which is applied if the attribute is missing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文