使用Python的libxml2从XML节点读取文本

时间:2012-05-22 01:38:50

标签: python xml python-3.x

我是第一次XPath用户,需要能够获取这些不同元素的文本值..例如timetitle等。我正在使用Python中的libxml2模块到目前为止还没有太多运气获得我需要的文本的值。这里的代码只返回元素标签..我需要值..任何帮助都会非常感激!

我正在使用此代码:

doc = libxml2.parseDoc(xmlOutput)
result = doc.xpathEval('//*')

使用以下文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE SCAN_LIST_OUTPUT SYSTEM "https://qualysapi.qualys.com/api/2.0/fo/sca/scan_list_output.dtd">
<SCAN_LIST_OUTPUT>
<RESPONSE>
<DATETIME>2012-01-22T01:21:53Z</DATETIME>
<SCAN_LIST>
  <SCAN>
    <REF>scan/2343423</REF>
    <TYPE>Scheduled</TYPE>
    <TITLE><![CDATA[customer 1 5/20/2012]]></TITLE>
    <USER_LOGIN>user1</USER_LOGIN>
    <LAUNCH_DATETIME>2012-02-21T04:11:05Z</LAUNCH_DATETIME>
    <STATUS>
      <STATE>Finished</STATE>
    </STATUS>
    <TARGET><![CDATA[13.3.3.2, 13.8.8.10, 13.10.12.60, 13.10.12.11...]]></TARGET>
  </SCAN>
</SCAN_LIST>
</RESPONSE>
</SCAN_LIST_OUTPUT>

2 个答案:

答案 0 :(得分:5)

您可以在每个返回的getContent()对象上调用xmlNode来检索关联的文本。请注意,这是递归的 - 要非递归地访问libxml2中的文本内容,您需要检索元素下的关联文本节点,并在 上调用.getContent()

也就是说,如果您使用lxml.etree(更高级别的Python API,仍然支持C libxml2库)而不是Python libxml2,这会更容易;在这种情况下,它只是element.text以字符串形式访问相关内容。

答案 1 :(得分:1)

看看Mark Pilgrim的潜入Python 3 Chapter 12. XML

本章从简短的XML课程开始(一般性的谈话,但是使用Atom Syndication Feed示例),然后继续使用标准xml.etree.ElementTree并继续使用第三方lxml实现更多interface(完整的XPATH 1.0,基于libxml2)。