【发布时间】:2014-02-04 12:40:06
【问题描述】:
有没有办法在 Python 中使用 BeautifulSoup 找到非递归 DOM 子节点?
例如考虑解析pom.xml 文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>com.parent</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>2.0.0</modelVersion>
<groupId>com.parent.somemodule</groupId>
<artifactId>some_module</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Some Module</name>
...
如果我想在顶层获得groupId(特别是project->groupId,而不是project->parent->groupId),我使用:
with open(pom) as pomHandle:
soup = BeautifulSoup(pomHandle)
groupId = soup.groupid.text
但不幸的是,无论层次结构级别如何,它都会在文件中找到groupId 的第一个物理匹配项,即project->parent->groupId。我实际上只想在特定节点级别而不是在其子节点中进行非递归查找。有没有办法在BeautifulSoup 中做到这一点?
【问题讨论】:
-
为什么要使用 BeautifulSoup(一个 HTML 解析器)来解析格式良好的 XML? Python 有一个非常好的 XML 解析器。
-
因为我不想处理命名空间 BS,这显然是不可忽视的
标签: python xml dom xml-parsing beautifulsoup