gpt4 book ai didi

java - 如何从 XSD 获取所有 xpath?

转载 作者:行者123 更新时间:2023-11-30 08:05:48 25 4
gpt4 key购买 nike

我有一个XSD,要求是将XSD中存在的所有元素的xpath列出到UI中,以便用户可以使用它执行一些与DOM相关的操作。

我可以通过编程方式从 XSD 中提取所有元素的 xpath 吗?

最佳答案

这是可以做到的,但您需要知道所有允许的路径的集合是无限的(例如由于递归或通配符),因此您将需要这个无限集合的智能表示,否则您的代码将如果您发现无法枚举列表,则需要放弃并返回类似“一切顺利”之类的内容。模式感知 Saxon 产品在根据模式检查 .//para 等路径表达式时会执行类似的操作:如果它知道上下文项的类型,它可以确定 .//para 是否能够选择任何内容,如果没有的话会给你一个警告。

作为第一步,您需要从源模式文档构建模式组件模型(相关部分)。不要尝试自己做这件事,这工作量太大了。许多产品都有一个 API,允许您访问架构组件模型。 Saxon 允许您使用 Validate 命令行上的 -scmout 标志从源模式文档生成模式组件模型作为 XML 表示形式。

一旦有了模式组件模型,您就可以通过转到其复杂类型(如果是简单类型,那么答案很简单)并递归地遍历粒子树,仅查找元素的允许子元素来找到元素的允许子元素。元素粒子和通配符粒子(你可能会决定,如果有通配符粒子,最好放弃)。您可能不仅要考虑元素的声明类型,还要考虑通过扩展从该元素派生的其他类型。您需要知道允许的子元素的元素声明,而不仅仅是允许的子元素名称,因为当然,在查找允许的孙子元素时,您需要从元素声明开始,因为可能存在元素的本地声明同名。

当然,当您知道元素名称与其允许的子元素之间的关系时,路径集就是该关系的传递闭包。

关于java - 如何从 XSD 获取所有 xpath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31139681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com