使用 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文件每次都会改变,所以我不能使用类生成提前致谢,
2 回答
![?](http://img1.sycdn.imooc.com/545847aa0001063202200220-100-100.jpg)
慕田峪7331174
TA贡献1828条经验 获得超13个赞
一般来说,我不建议使用模式文档的原始 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) 扩展了模型组和属性组。
添加回答
举报
0/150
提交
取消