XML复杂模式匹配表达式
我需要匹配一组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的元素结束,并且在两者之间需要一个具
(//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复杂类型,也许它可以工作,但我不能