问题描述
<OperationDate>
<Type> XYZ </Type>
<Qualifier> ABCD </Qualifier>
<Value>
<Date> 2021-01-22 </Date>
</Value>
</OperationDate>
<OperationDate>
<Type> PQR </Type>
<Qualifier> LMNO </Qualifier>
<Value>
<Date> 2021-02-12 </Date>
</Value>
</OperationDate>
<OperationDate>
<Type> ABC </Type>
<Qualifier> QXYZ </Qualifier>
<Value>
<Date> 2021-03-02 </Date>
</Value>
</OperationDate>
现在我想从这个片段中提取值/日期以类型和限定符为条件,因为它们共同构成了这个值的标识符元素。
此特定功能的 XPath 命令是什么。
PS - 将此 XML 文件视为自动生成的文件,因此我无法对其进行更改。我只需要从中提取价值。
我对 XPath 非常陌生,只需要它来实现这一功能,我找到了为属性设置条件的方法,但我只需要为子元素设置条件。
解决方法
试试这个:
for operation in response.xpath("//OperationDate//Value"):
value = operation.xpath("./Date/text()")
此代码适用于 python,所以我不确定如何将其翻译成其他语言的逻辑。
,我认为您的问题意味着您同时拥有类型和限定符,并且您需要与它们关联的日期。
总的来说,您需要了解的是xpath的“谓词”,即方括号中的部分。有了这个,您可以只选择满足特定条件的节点。
一种方法是
//OperationDate[Type="your type" and Qualifier="your qualifier"]/Value/Date/text()
在 Python 中测试:
In [10]: tree.xpath('//OperationDate[Type=" XYZ " and Qualifier=" ABCD "]/Value/Date/text()')
Out[10]: [' 2021-01-22 ']
但是请注意,此版本对值中的前导和尾随空格很敏感。
In [12]: tree.xpath('//OperationDate[Type="XYZ" and Qualifier="ABCD"]/Value/Date/text()')
Out[12]: []
修复该问题的版本
//OperationDate[normalize-space(Type)="your type" and normalize-space(Qualifier)="your qualifier"]/Value/Date/text()
In [11]: tree.xpath('//OperationDate[normalize-space(Type)="XYZ" and normalize-space(Qualifier)="ABCD"]/Value/Date/text()')
Out[11]: [' 2021-01-22 ']