0

假设我有一个类似这样的 XML:

<root xmlns="default" xmlns:add="additional">
    <element foo="fromDefault" />
    <add:element foo="fromDefault" add:bar="fromAdditional" />
</root>

我想做的是合并这两个element定义以避免重复,如下所示:

<root xmlns="default" xmlns:add="additional">
    <element foo="fromDefault" add:bar="fromAdditional" />
</root>

但我什至不确定这是否可能。

我觉得这可能是可行的,因为我们对根元素使用了一些类似的符号,例如:

<root xmlns:xsi="..."
         xsi:schemaLocation="...">

不幸的是,我无法找到任何有关此问题的文档/参考/教程/任何内容,有人可以帮我澄清我想做的事情是否可行(或不可行)并与我分享一些链接吗?

提前致谢!

4

1 回答 1

1

我认为您正在寻找这样的东西:

附加的.xsd

<xs:schema 
  targetNamespace="additional"
  elementFormDefault="qualified"
  xmlns="additional"
  xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
  xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:attribute name="bar" type="xs:string"/>

</xs:schema>

默认.xsd

<xs:schema 
  targetNamespace="default"
  elementFormDefault="qualified"
  xmlns="default"
  xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:add="additional">

  <xs:import namespace="additional" schemaLocation="additional.xsd"/>

  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="element" minOccurs="1" maxOccurs="1">
          <xs:complexType>
            <xs:attribute name="foo" type="xs:string"/>
            <xs:attribute ref="add:bar"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>

第一个模式仅定义“附加”内容(在示例中只是一个属性),第二个模式导入它并定义其他所有内容,在需要时引用其他内容。

于 2012-10-02T23:22:25.337 回答