XPath内置函数及其与lxml的使用

时间:2013-12-19 20:46:30

标签: python xml xpath lxml

这是一个我正在尝试的简单代码示例。

from lxml import etree

myXML = etree.XML('''\
  <registers part="FXLS8471Q">
    <register fxblock="Newfx">
      <regname>STATUS_NEW</regname>
      <regnamelong/>
      <type>R</type>
      <address>00</address>
      <defaulthex>00</defaulthex>
      <field>
        <number>7</number>
        <name>F_STATUS</name>
        <width>8</width>
        <reset>00000000</reset>
      </field>
    </register>
  </registers>
    ''')

def hello(context, a):
    return "Hello %s" % a

ns = etree.FunctionNamespace(None)
ns['hello'] = hello

print(myXML.xpath("hello('Dr. Falken')"))
print(myXML.xpath('hello(string(regname))'))

我很困惑为什么最后一句话没有打印出我期望的内容(STATUS_NEW)。如何判断我的Python 2.7和站点包是否存在不兼容问题?或者是否存在编码错误?

lxml是否支持所有XPath内置函数,如果没有,有人能指出我支持哪些子集?我正在使用lxml 3.2.1。

谢谢, 贾亚拉姆

1 个答案:

答案 0 :(得分:1)

正确的XPath表达式为//regname/registers/register/regname

print(myXML.xpath('hello(string(//regname))'))