作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在解析一个大型 XML 文件,该文件本质上包含一个表。 XML 中的节点并不总是有名称。嵌套在多个标签的深处基本上是一个类似 HTML 的表格,其中包含 <TD>
行 ( <TR>
) 标签内包含原始(数字)数据。现在,在我可以迭代到表之前,有一大堆我不感兴趣的元数据标签。例如:
<?xml version="1.0" ?>
<soap:Envelope xmlns:soap="--ommitted--" xmlns:xsi="--ommitted--">
<soap:Body>
<FetchReportResponse xmlns="URL1">
<FetchReportResult xmlns="URL2">
<REPORT>
<TITLE>CROSS VISITING REPORT</TITLE>
<SUBTITLE/>
<SUMMARY>
<GEOGRAPHY>--ommitted--</GEOGRAPHY>
<LOCATION>--ommitted--</LOCATION>
<TIMEPERIOD>--ommitted--</TIMEPERIOD>
<TARGET>--ommitted--</TARGET>
<MEDIA>--ommitted--</MEDIA>
<DATE>--ommitted--</DATE>
<USER>--ommitted--</USER>
</SUMMARY>
<TABLE>
<THEAD>
<TR>
<TH>--ommitted--</TH>
<TD>--ommitted--</TD>
<TD>--ommitted--</TD>
<TD>--ommitted--</TD>
<TD>--ommitted--</TD>
<TD>--ommitted--</TD>
<TD>--ommitted--</TD>
我是 XML 解析新手,所以我关注 this 。我有以下代码来读取 XML 文件并创建 ElementTree 对象。
import xml.etree.ElementTree as ET
tree = ET.parse('./../filename.xml')
print(root.find("./"))
这可以理解地打印以下内容:
<Element '{http://schemas.xmlsoap.org/soap/envelope/}Envelope' at 0x00000230CAC23318>
但是,当我尝试使用 XPath 约定从这里遍历它时,我无法做到。例如,
print(root.find("./Body"))
打印None
,尽管 <Body>
显然嵌套在 <Envelope>
内。
编辑:根据 Mark Tolonen 的回答,我能够找到 Body
标签,但我该如何超越它呢?更具体地说,我想到达 <TABLE>
标签。
最佳答案
除了XPath部分之外,您还需要注意the Namespaces section文档的,因为您的 XML 包含各种 namespace ,有或没有前缀(后者称为默认 namespace )。请注意,TABLE
元素从最近的祖先继承命名空间,默认命名空间为:FetchReportResult
。因此,要查找 TABLE
,您需要使用默认命名空间 URI "URL2"
,可以使用大括号语法或使用前缀 URI 字典:
ns = { "u2": "URL2" }
tables = root.findall(".//u2:TABLE", ns)
关于python - 在 Python 中遍历没有命名空间的 XML 树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48371969/
我是一名优秀的程序员,十分优秀!