XML复杂模式匹配表达式

XML复杂模式匹配表达式,xml,regex,xpath,pattern-matching,xquery,Xml,Regex,Xpath,Pattern Matching,Xquery,我需要匹配一组XML文档上的模式(所有文档都具有相同的模式),当模式匹配时,我需要检索内容并对其进行一些特定的转换 我有一个类似于正则表达式的“模式”列表,但是有元素和属性 伪模式示例: (//ELEMENTx) (node())* (//ELEMENTy[@ATTRIBUTEz]) (node())* (//@ATTRIBUTEw) 我只在括号内使用了XPath语法。可以使用其他量词 当xml将ELEMENTx作为第一个元素,以一个具有ATTRIBUTEw的元素结束,并且在两者之间需要一个具

我需要匹配一组XML文档上的模式(所有文档都具有相同的模式),当模式匹配时,我需要检索内容并对其进行一些特定的转换

我有一个类似于正则表达式的“模式”列表,但是有元素和属性

伪模式示例:

(//ELEMENTx) (node())* (//ELEMENTy[@ATTRIBUTEz]) (node())* (//@ATTRIBUTEw)
我只在括号内使用了XPath语法。可以使用其他量词

当xml将ELEMENTx作为第一个元素,以一个具有ATTRIBUTEw的元素结束,并且在两者之间需要一个具有ATTRIBUTEz的ELEMENTy时,这将匹配

注意,我需要为每个模式匹配整个文档,而不仅仅是其中的一部分

在这种情况下,元素的嵌套并不重要(ELEMENTy可能是ELEMENTx的子元素,也可能不是),但它们需要具有特定的顺序

编辑: 为了澄清这一点,XML具有包含语法信息的树。我需要匹配语法模式

例如:

TOP / \ X Y |\ |\ 1 2 3 4 顶部 / \ xy |\ |\ 1 2 3 4 匹配模式可以是(节点名称,假设没有属性):
xy
1*Y
x34
1*4


我可以使用XPath获取模式的每个单独部分,但是我失去了顺序感……如果我执行两个XPath查询,我不知道结果相对于彼此的位置

匹配之后,我将为每个模式制定规则,指定内容的一些转换(变更顺序等)

有没有任何方法可以使用XPath或XQuery执行类似的操作? 我可以使用DOM并自己编写模式匹配代码,但也许已经有更好的方法来实现这一点了

谢谢你的指点

我需要匹配一组XML文档上的模式(所有文档都具有相同的模式),当模式匹配时,我需要检索内容并对其进行一些特定的转换

到目前为止,这听起来像是对XSLT的一个很好的描述。直到您说您希望规则匹配节点序列,而不是单个节点

但是,如果要匹配的节点序列是某个父节点的子节点序列,则可以将其作为匹配父节点的规则进行重新编码

XSLT中的模式匹配语言没有您所期望的那么强大,但它可能适合您的需要。想到的两种可能性是:(a)将要匹配的结构信息转换为字符串,并使用正则表达式匹配来评估字符串,或者(b)为要匹配的语法编写XSD复杂类型定义,并使用XSLT按类型验证功能(与XSLT 3.0的try/catch结合使用)测试节点序列是否与架构中的命名复杂类型匹配

我需要匹配一组XML文档上的模式(所有文档都具有相同的模式),当模式匹配时,我需要检索内容并对其进行一些特定的转换

到目前为止,这听起来像是对XSLT的一个很好的描述。直到您说您希望规则匹配节点序列,而不是单个节点

但是,如果要匹配的节点序列是某个父节点的子节点序列,则可以将其作为匹配父节点的规则进行重新编码


XSLT中的模式匹配语言没有您所期望的那么强大,但它可能适合您的需要。想到的两种可能性是:(a)将要匹配的结构信息转换为字符串,并使用正则表达式匹配来评估字符串,或者(b)为要匹配的语法编写XSD复杂类型定义,并使用XSLT按类型验证功能(与XSLT 3.0的try/catch结合使用)测试节点序列是否匹配模式中的命名复杂类型。

我需要匹配节点序列,因为XML表示自然语言的语法信息,因此它有一个树和依赖项。为此,我需要匹配树中的一系列节点和属性。依赖关系是另一个独立的问题。目前的模式不必指定特定的父/子结构,但顺序很重要。从某种意义上说,这个序列是一个顶级节点的子节点序列,但是正则表达式使事情变得复杂。我会看看我是否能像你说的那样用父母匹配规则做到。。。转换为字符串,然后使用正则表达式是我想做的第一件事,但它很容易变得更复杂,我想XPath或XQuery中可能存在一个解决方案。关于XSD复杂类型,也许它可以工作,但我不能在这个(学术项目,没有预算)中使用Saxon PE,所以我没有3.0…我试图在这个过程中学习XPath,我刚刚发现op:node-before函数和StackOverflow最适合于简单的编码问题和简单的答案。对于关于复杂自然语言问题的替代设计方法的讨论,mulberrytech xsl列表可能是一个更好的论坛。我需要匹配一系列节点,因为XML表示自然语言的语法信息,所以它有一个树和依赖项。为此,我需要匹配树中的一系列节点和属性。依赖关系是另一个独立的问题。目前的模式不必指定特定的父/子结构,但顺序很重要。从某种意义上说,这个序列是一个顶级节点的子节点序列,但是正则表达式使事情变得复杂。我会看看我是否能像你说的那样用父母匹配规则做到。。。转换为字符串,然后使用正则表达式是我想做的第一件事,但它很容易变得更复杂,我想XPath或XQuery中可能存在一个解决方案。关于XSD复杂类型,也许它可以工作,但我不能