如何在processContents = lax中指定外部模式

时间:2011-10-04 14:57:30

标签: java xml xsd xmlbeans

我有一个通用架构,定义了这样的部分:

<xs:element name="detail">
    <xs:annotation>
        <xs:documentation>
        </xs:documentation>
    </xs:annotation>    

    <xs:complexType>
        <xs:sequence>
            <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:anyAttribute processContents="skip"/>
    </xs:complexType>
</xs:element>

我一直在阅读这些东西的大部分时间,但似乎仍然无法理解如何深入到在detail元素下的实际xml文档中找到的字段。

我知道它看起来像这样:

<detail>
   <drawing>
      <name="test"/>
    </drawing>
</detail>

<detail>
   <icon>
      <icon_name="testIcon"/>
      <icon_image="iconImage.jpg"/>
    </icon>
</detail>

xmlbeans没有办法知道细节元素是什么,因为它是一个通配符,因此它没有为我提供一种潜入这些元素的方法。 xmlbeans网站表明我修改了我已读入的文档,将通配符元素向上移动了一个级别,但这似乎并没有被切断和干燥。 我还可以修改模式以对可能存在于我的特定代码的元素执行元素引用。对此的想法?

1 个答案:

答案 0 :(得分:0)

由于detail元素可以包含任何有效的XML,因此您只能使用访问内容的一些通用方法(XPath,DOM遍历或类似方法),或者通过专门尝试将每个子项与特定模式匹配(最好使用unique命名空间)。然后,可以将匹配已知模式的子项提供给您喜欢的库,该库使用XML生成对象。

正如您所说,另一个选项可以是在模式中指定每个有效的子类型(可选择在底部使用通配符以实现可扩展性)。