xml - 在 XSD 元素中声明命名空间属性

标签 xml xsd namespaces attributes

我在 Eclipse 中使用内置功能从 XSD 生成 XML 文件。
XML 必须按照下面给出的方式生成,“地址簿”位于不同的命名空间下。

<employee xmlns:ns2="urn:employees_2014_1.lists.webservices.test.com">
    <department>8029</department>
    <emailAddress>USER_17@something.com</emailAddress>
    <employeeAddressBookList>
        <ns2:addressbook>
            <ns2:addressee>BC</ns2:addressee>
            <ns2:addr1>A1</ns2:addr1>
            <ns2:addr2>A2</ns2:addr2>
            <ns2:city>C1</ns2:city>
            <ns2:state>ST1</ns2:state>
            <ns2:zip>10001</ns2:zip>
        </ns2:addressbook>
    </employeeAddressBookList>
    <employeeId>000001</employeeId>
</employee>

我的 XSD 如下所示。
    <xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:element name="employee">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="department" type="xsd:int" />
            <xsd:element name="emailAddress" type="xsd:string" />
            <xsd:element name="employeeAddressBookList">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="ns2:addressbook">
                    <xsd:complexType>
                      <xsd:sequence>
                        <xsd:element name="ns2:addressee" type="xsd:string" />
                        <xsd:element name="ns2:addr1" type="xsd:string" />
                        <xsd:element name="ns2:addr2" type="xsd:string" />
                        <xsd:element name="ns2:city" type="xsd:string" />
                        <xsd:element name="ns2:state" type="xsd:string" />
                        <xsd:element name="ns2:zip" type="xsd:int" />
                      </xsd:sequence>
                    </xsd:complexType>
                  </xsd:element>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
            <xsd:element name="employeeId" type="xsd:int" />
          </xsd:sequence>
<xsd:attribute name="xmlns:ns2" type="xs:string" />
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>

这生成了一个没有命名空间值的 XML。
<employee xmlns:ns2="">
    <department>8029</department>
    <emailAddress>USER_17@something.com</emailAddress>
    <employeeAddressBookList>
        <ns2:addressbook>
            <ns2:addressee>BC</ns2:addressee>
            <ns2:addr1>A1</ns2:addr1>
            <ns2:addr2>A2</ns2:addr2>
            <ns2:city>C1</ns2:city>
            <ns2:state>ST1</ns2:state>
            <ns2:zip>10001</ns2:zip>
        </ns2:addressbook>
    </employeeAddressBookList>
    <employeeId>000001</employeeId>
</employee>

我说的是这条线...
<employee xmlns:ns2="">

如何为命名空间添加值?

最佳答案

XSD 有很多问题,以至于您从中获取任何 XML 都令人惊讶:

  • 命名空间声明不是属性。
  • 元素 @name属性值必须是 NCNAMEs(没有命名空间
    字首)。
  • 您不能同时拥有命名空间(addressbook 和后代)和
    非命名空间( employeedepartment 等)组件声明
    在单个 XSD 中——你需要使用 xsd:import .

  • 如果不对 XSD 进行(至少)上述修复,就不能期望从中生成正确的 XML。

    关于xml - 在 XSD 元素中声明命名空间属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38987609/

    相关文章:

    javascript - 从 xsd 获取 html 表单

    java - 如何在 JAXB 中指定对象引用数据类型

    c# - 使用 .NET XmlSerializer 反序列化时使用多个命名空间

    在 Laravel Controller 中找不到 PHP 类

    Spring RuntimeBean引用

    Python 通过 xml 抓取打印空括号

    xml - 根节点的 xpath 属性

    java - 生成实现接口(interface)的 JAXB 类

    c# - 使用 XDocument 写入 XML,但知道在何处写入

    java - 在 spring 集成中将 json 转换为对象数组