我在 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
和后代)和非命名空间(
employee
、 department
等)组件声明在单个 XSD 中——你需要使用
xsd:import
. 如果不对 XSD 进行(至少)上述修复,就不能期望从中生成正确的 XML。
关于xml - 在 XSD 元素中声明命名空间属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38987609/