Python findall使用带有逻辑AND的xpath模式

问题描述 投票:0回答:1

这是我的xpath:

<Unit>
  <_unit_type>FSP</_unit_type>
  <_logicalId>FSM1/FSP1</_logicalId>
</Unit>
<Unit>
  <_unit_type>FSP</_unit_type>
  <_logicalId>FSM1/FSP2</_logicalId>
</Unit>

所以我需要在len(root.findall(xpath_pattern)时找到xpath_pattern = .//Unit[_unitType='FSP'][starts-with(_logicalId,'FSM1']

如果我的模式是.//Unit[_unitType='FSP'],我的代码可以工作,并且我可以得到2的长度。但是我需要添加另一个限定符,因为我的xml文件要复杂得多。

我收到SyntaxError:使用此模式时谓词无效.//Unit[_unitType='FSP'][starts-with(_logicalId,'FSM1']

python xpath findall
1个回答
0
投票

只需使用AND运算符即可添加所需的条件。

例如,如果您正在寻找特定的“单位”:

//Unit[_unit_type='FSP' AND contains(.,'S')][starts-with(_logicalid,'FSM1') AND contains(.,'FSP1')]

您也可以使用“ |”使用多个XPath。 Xpath1 | Xpath2 | Xpath3 | ...如果您要寻找与Unit不同的东西:

//Unit[_unit_type='FSP'][starts-with(_logicalid,'FSM1')]|//Entity[_unit_type='XYZ'][starts-with(_logicalid,'FSM1')]
© www.soinside.com 2019 - 2024. All rights reserved.