xsd 的 Java Saxon 有效子树

使用 Saxon-HE 我想解析一个 xsd 文件,从给定的元素名称获取生成的树,获取生成的子树,以及所有必需的 simpleType 和 complexType(都使用类型引用和来自引用),例如解析一个像:


<?xml version="1.0" encoding="utf-8"?>

<xs:schema id="PSS" xmlns=""

    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element maxOccurs="unbounded" name="Assistito">

        <xs:complexType>

            <xs:sequence>

                <xs:element minOccurs="0" name="IDCittadino" type="IDCittadino"/>

                <xs:element maxOccurs="unbounded" name="Struttura">

                    <xs:complexType>

                        <xs:sequence>

                            <xs:element name="CodiceStruttura" type="CodiceStruttura"/>

                        </xs:sequence>

                    </xs:complexType>

                </xs:element>

            </xs:sequence>

        </xs:complexType>

    </xs:element>

    <xs:simpleType name="IDCittadino">

        <xs:restriction base="xs:string">

            <xs:minLength value="20"/>

            <xs:maxLength value="32"/>

        </xs:restriction>

    </xs:simpleType>   

    <xs:simpleType name="CodiceStruttura">

        <xs:restriction base="xs:string">

            <xs:minLength value="1"/>

            <xs:maxLength value="8"/>

        </xs:restriction>

    </xs:simpleType>   

</xs:schema>

我需要从名称为“Struttura”的元素中获取子树,这也需要获取名称为“CodiceStruttura”的 simpleType,例如:


<?xml version="1.0" encoding="utf-8"?>

<xs:schema id="PSS" xmlns=""

    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="Struttura">

        <xs:complexType>

            <xs:sequence>

                <xs:element name="CodiceStruttura" type="CodiceStruttura"/>

            </xs:sequence>

        </xs:complexType>

    </xs:element>


笔记


通常,要一致的 xsd 应保留 xs:element 中使用的所有类型,但您也可以使用“ref 属性”,这也应考虑在内

我不想用jaxb或类似的方式生成类,因为xsd文件每次都会改变,所以我不能使用类生成

提前致谢,


万千封印
浏览 128回答 2
2回答

慕田峪7331174

一般来说,我不建议使用模式文档的原始 XML,我建议使用模式编译器生成的模式组件模型,否则你会发现自己要么 (a) 复制模式编译器完成的所有工作,或者 (b) 弄错了,并且没有正确处理所有模式。您可以通过多种方式以编程方式访问架构组件模型。Saxon 提供了两种方法(但都需要 Saxon-EE)。(a) 您可以使用 Saxon 的模式处理器(使用com.saxonica.Validate -xsd:schema.xsd -scmout:schema.scm)输出模式组件模型的 XML 表示。(b) 您可以使用一组扩展函数从 XSLT 或 XQuery 访问模式组件模型,从saxon:schema().作为替代方案,Xerces 模式处理器为其内部模式组件模型提供了一个 Java API,您可以使用 Xalan(或者实际上是 Saxon)扩展函数访问这个 API。在所有这些情况下,可用的“架构组件模型”非常接近 W3C XSD 规范中描述的抽象架构组件模型。与使用原始模式文档的主要区别包括 (a) 所有导入、包含和跨组件引用都已解决;(b) 所有默认值都已扩大;(c) 扩展了模型组和属性组。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java