好的,所以我有一些看起来像这样的xml示例:
<Node name="details">
<Node name="1130482269">
<Val name="type"><u>2</u></Val>
<Val name="owner"><n/></Val>
<Val name="account_number"><u>99-71-39</u></Val>
</Node>
<Node name="570722270">
<Val name="type"><u>2</u></Val>
<Val name="owner"><n/></Val>
<Val name="account_number"><u>99 71 40</u></Val>
</Node>
<Node name="1845243341">
<Val name="type"><u>2</u></Val>
<Val name="owner"><n/></Val>
<Val name="account_number"><u>9971-41</u></Val>
</Node>
</Node>
我正在尝试基于account_number进行搜索。但它有许多不同的格式。有些有空格,有些有破折号,有些有混合等。如果我能够搜索删除空格和短划线,我应该能够得到任何帐号。
使用accountnumber作为搜索查询,最终目标是通过在XPATH中执行搜索来获取第二级节点名称编号:
doc = libxml2.parseDoc(xml)
ctxt = doc.xpathNewContext()
res = ctxt.xpathEval("/Node/Node[Val[@name='account_number']/*='" + str(accountnumber) + "']/@name")
有没有办法使用XPATH搜索,删除所有破折号和空格,只留下数字?
由于
答案 0 :(得分:2)
是的,可以使用translate()
功能。例如:
"translate(Node/Node[@name='1130482269']/Val[@name='account_number'],'- ','')"
将输出997139
。
您可以使用then(为便于阅读而破坏代码行):
"translate(
/Node/Node[@name='" +
str(accountnumber) +
"']/Val[@name='account_number'],'- ','')"
请注意删除空格所需的翻译'- '
(或甚至'- '
)的第二个参数中包含的空格。
答案 1 :(得分:0)
不幸的是,libxml2环境仅支持XPath 1.0,因此您无法访问XPath 2.0的正则表达式功能,例如matches()函数。但它确实支持添加您自己的扩展功能(请参阅http://xmlsoft.org/XSLT/extensions.html),以便您可以考虑自己这样做。