Python Xpath查询';比如';替代

Python Xpath查询';比如';替代,python,xpath,Python,Xpath,好的,我有一些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-

好的,我有一些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>
有没有办法使用XPATH搜索,删除所有的破折号和空格,只留下数字


谢谢

是的,可以使用
translate()
函数。例如:

"translate(Node/Node[@name='1130482269']/Val[@name='account_number'],'- ','')"
将输出
997139

您可以使用then(为了可读性而中断代码行):


请注意translate
'-'
(甚至是
'- ;
)的第二个参数中包含的空格是删除空格所必需的。

不幸的是,libxml2环境只支持XPath 1.0,因此您无法访问XPath 2.0的正则表达式功能,例如matches()函数。但是它确实支持添加您自己的扩展函数(见),因此您可以自己考虑这样做。p> 你不能把所有的“”和“-”都换成零吗?从文本中删除它们?我不熟悉Python,但据我所知,只有xpath无法满足您的需要,因为我可以使用大量的if语句:-(您可能可以创建一个正则表达式来替换标记之间的任何“-”或“”,或者查询所有Val[@account\u number]使用xpath和重写其值的节点。如果您需要一个自定义函数来规范化数据而不是转换数据,则可以编写自己的扩展函数:
"translate(Node/Node[@name='1130482269']/Val[@name='account_number'],'- ','')"
"translate(
  /Node/Node[@name='" + 
  str(accountnumber) + 
  "']/Val[@name='account_number'],'- ','')"