Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有XPath来查找特定模式下的节点?_Python_Regex_Xml_Xpath - Fatal编程技术网

Python 是否有XPath来查找特定模式下的节点?

Python 是否有XPath来查找特定模式下的节点?,python,regex,xml,xpath,Python,Regex,Xml,Xpath,我试图编写一个xpath来查找具有遵循特定模式的子体的xml节点。例如,如果我有以下xml: <While> <Condition> <ID val="shouldLoop"/> </Condition> <Assign> <ID val="StringVariable1"/> <Parens> <Parens> <String v

我试图编写一个xpath来查找具有遵循特定模式的子体的xml节点。例如,如果我有以下xml:

<While>
  <Condition>
    <ID val="shouldLoop"/>
  </Condition>
  <Assign>
    <ID val="StringVariable1"/>
    <Parens>
      <Parens>
        <String val="StringLiteral"/>
      </Parens>
    </Parens>
  </Assign>
  <Assign>
    <ID val="StringVariable2"/>
    <String val="StringFigurative"/>
  </Assign>
  <Assign>
    <ID val="StringVariable3"/>
    <Add>
      <String val="StringLiteral"/>
      <String val="StringFigurative"/>
    </Add>
  </Assign>
</While>

我想得到三个“Assign”节点中的前两个,基于它们有一个子节点,该子节点是嵌套在0个或多个“Parens”标记中的“String”节点


是否有一种xpath可以实现这一点,类似于使用正则表达式(如“(Parens/)*String”)将匹配“String”和“Parens/Parens/String”?

请尝试下面的
xpath
并告诉我结果

//Assign[//Parens[String] or String][position()<3]

//分配[//Parens[String]或String][position()
//分配[String | Parens//String]
将找到
Assign
带有
String
子对象或带有
Parens
子对象的
Assign
子对象。
..
也将匹配,因此不精确。此xpath似乎将所有赋值与作为子对象的字符串或Parens/String节点匹配,并返回前两个。如果例如,XML的顺序不同,我仍然希望它返回带有StringVariable1和StringVariable2的赋值,但不返回StringVariable3。我正在寻找一种xpath,它将返回赋值,而赋值与其字符串子节点之间不带任何参数或仅带paren。StringVariable3的Add节点打破了这种模式,因此应该是这样的排除,但其余部分应匹配。是否存在类似于
的内容?您不希望也匹配此项,对吗?对。不匹配。