如何将Main.xsd中OrderDetail元素的命名空间改为OrderTypes.xsd的命名空间?
解决XSD中OrderDetail元素命名空间调整问题
嘿,这个问题我之前处理过,核心就是要让OrderDetail元素归属到http://NamespaceTest.com/OrderTypes命名空间下,而不是当前的Purchase命名空间。这里有两种可行的方案,你可以根据实际情况选择:
方案一:在OrderTypes.xsd中定义OrderDetail元素(推荐)
这种方式更符合XSD的模块化设计,把属于OrderTypes命名空间的元素统一放在对应的schema文件里。
首先修改OrderTypes.xsd,添加OrderDetail元素的定义:
<?xml version="1.0" encoding="utf-16"?> <xs:schema elementFormDefault="qualified" targetNamespace="http://NamespaceTest.com/OrderTypes" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="OrderType"> <xs:sequence> <xs:element name="Item" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="ProductName" type="xs:string" /> <xs:element name="Quantity" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <!-- 新增:定义OrderDetail元素,自动归属OrderTypes命名空间 --> <xs:element name="OrderDetail" type="OrderType" /> </xs:schema>
然后修改Main.xsd,不再自己定义OrderDetail元素,而是直接引用OrderTypes命名空间下的该元素:
<?xml version="1.0" encoding="utf-16" ?> <xs:schema xmlns:ord="http://NamespaceTest.com/OrderTypes" targetNamespace="http://NamespaceTest.com/Purchase" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:import namespace="http://NamespaceTest.com/OrderTypes" schemaLocation="OrderTypes.xsd" /> <xs:element name="Purchase"> <xs:complexType> <xs:sequence> <!-- 使用ref引用外部命名空间的元素 --> <xs:element ref="ord:OrderDetail" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
方案二:在Main.xsd中显式指定元素命名空间(无需修改OrderTypes.xsd)
如果没办法修改OrderTypes.xsd,可以直接在声明OrderDetail元素时,通过namespace属性强制指定它的归属:
<?xml version="1.0" encoding="utf-16" ?> <xs:schema xmlns:ord="http://NamespaceTest.com/OrderTypes" targetNamespace="http://NamespaceTest.com/Purchase" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:import namespace="http://NamespaceTest.com/OrderTypes" schemaLocation="OrderTypes.xsd" /> <xs:element name="Purchase"> <xs:complexType> <xs:sequence> <!-- 显式指定元素的命名空间为OrderTypes --> <xs:element name="OrderDetail" type="ord:OrderType" namespace="http://NamespaceTest.com/OrderTypes" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
两种方案都能实现你的需求,方案一的架构更清晰,适合长期维护;方案二更灵活,适合无法修改依赖schema的场景。
内容的提问来源于stack exchange,提问作者user1738998
相关产品推荐
相关产品推荐

