我需要匹配一组 XML 文档(都具有相同的模式)上的模式,当模式匹配时,我需要检索内容并对其进行一些特定的转换。
我有一个“模式”列表,它们类似于正则表达式,但包含元素和属性。
伪模式示例:
(//ELEMENTx) (node())* (//ELEMENTy[@ATTRIBUTEz]) (node())* (//@ATTRIBUTEw)
我只在括号内使用了 XPath 语法。可以使用其他量词...
当 xml 将 ELEMENTx 作为第一个元素,以一个具有 ATTRIBUTEw 的元素结束,并且在两者之间需要一个具有 ATTRIBUTEz 的 ELEMENTy 时,这将匹配。
请注意,我需要为每个完整模式匹配整个文档,而不仅仅是其中的一部分。
在这种情况下,元素的嵌套并不重要(ELEMENTy 可以是 ELEMENTx 的子代,也可以不是),但它们需要具有特定的顺序。
编辑:澄清一下,XML 有带有语法信息的树。我需要匹配句法模式。
例子:
最佳 / \ XY |\ |\ 1 2 3 4
匹配模式可以是(节点名称,假设没有属性):
XY
1 * Y
X 3 4
1 * 4
我可以使用 XPath 来获取模式的每个单独部分,但是我会失去秩序感……如果我执行两个 XPath 查询,我不知道结果相对于彼此的位置。
匹配后,我将为每个模式制定规则,指定内容的一些转换(更改顺序等)。
有没有办法使用 XPath 或 XQuery 做这样的事情?我可以使用 DOM 并自己制作模式匹配代码,但也许已经有更好的方法来做到这一点。
感谢您的任何指示。