Xml 使用XPath查询XSD以获取节点详细信息

Xml 使用XPath查询XSD以获取节点详细信息,xml,perl,xpath,xsd,Xml,Perl,Xpath,Xsd,是否有一个Perl模块可以加载XSD并允许XPath查询返回详细信息,例如/MemberDetails/MemberNumber的类型,它是否是可选的,是否重复,等等 我的用例是将CSV文件转换为XML,我得到了一个XSD和一个映射文件,其中列出了输入字段的位置和输出XPath值 映射文件没有指定哪些字段是可重复的,因此为XML::Compile::Schema构建数据结构很麻烦。我可以手动添加每个字段的详细信息,但是我希望避免这种情况 我目前的想法是拆分XPath表达式,然后使用类似于$xsd

是否有一个Perl模块可以加载XSD并允许XPath查询返回详细信息,例如
/MemberDetails/MemberNumber
的类型,它是否是可选的,是否重复,等等

我的用例是将CSV文件转换为XML,我得到了一个XSD和一个映射文件,其中列出了输入字段的位置和输出XPath值

映射文件没有指定哪些字段是可重复的,因此为
XML::Compile::Schema
构建数据结构很麻烦。我可以手动添加每个字段的详细信息,但是我希望避免这种情况


我目前的想法是拆分XPath表达式,然后使用类似于
$xsd=$schema->template('TREE'=>$type)
的方法遍历它,在结构的每个级别检查类型。但这感觉是一种相当笨拙和危险的方法。

您可以像使用任何其他xml文件一样使用xsd并获取属性等等。因此,同样的工具也能够做到这一点:

  • XML::XPath(旧)
  • XML::LibXML(最好是)

LibXML还可以根据该xsd验证xml结果(是否有效)。

True我可以在xsd上使用XPath,但是布局非常复杂,有很多间接寻址。如果已经有XSD解析器能够做到这一点,那么将XPath查询分解为组件元素,然后遵循命名复杂类型的定义将是相当多的工作。如果要生成XML,我还需要知道中间类型以构建XML::Compile::Schema的结构,这样我就不能只搜索最深节点的类型。例如,请参阅上一篇XSD,我不太确定您想要实现什么:您想要获取XSD中每个特定节点的参数吗?或者您想创建对某些xsd有效的xml文件?也许这会更适合您:实际上两者都是。XML::Compile::Schema将加载XSD并允许您传入perl哈希。它将验证哈希并将其转换为XML。这非常简单,但您需要知道程序中每个节点的属性(例如,用于收集的数组)。我希望让程序查询这些节点属性以自动构建结构,因为它们只是给我一个值和最终的XPath地址,我不知道中间的哪些节点是集合等。XML::Pastor似乎很有趣,我从未见过它,但会尝试让它工作(我们的Perl是旧的,在Windows上)。