我正在尝试获取加载到 BS 对象的 xml 文件中的特定标签,但是当我到达特定标签时,当我尝试使用方括号"[]"访问子项时,BS 将进入第一个子项。
例如,给定下面的 XML,我应该使用以下 python 代码访问 conditionalBlocks:
reportPages = reportpages.findAll('page')
for reportPage in reportPages:
contents = reportPage.findAll('pagebody')[0].find_all('contents') #[0].findAll()
print "contents; ", contents
conditionalBlocks = contents[0].find_all('conditionalBlocks')
print "conblox; ", conditionalBlocks
现在在print "contents, "...
我得到输出:
<contents>
<textitem>
<datasource>
<staticvalue>Foods Management Guide for </staticvalue>
</datasource>
<style>
<defaultStyles>
<defaultStyle refStyle="wwtxtt"/>
</style>
</textitem>
</contents>
据我所知,这是不完整的;它只有内容标签中第一个textItem
标签的内容,而没有后面的其他标签
还有print "conblox; ", ...
我得到输出的行; conblox; []
说没有找到条件块标签,这;如果我查看正在读取的 xml(见下文);是不可能的。
我不明白它是如何找到第一个标签的,而不是其他标签,即:conditionalBlocks
.有人可以帮忙解释一下吗?
这是我正在使用的XML(缩短以使其易于阅读):
<reportPages>
<page name="Page1">
<pageBody>
<contents>
<textItem>...</textItem>
<textItem>...</textItem>
<block>...</block>
<block>...</block>
<conditionalBlocks>
<conditionalBlockDefault>...</conditionalBlockDefault>
<conditionalBlockCases refVariable="vView">
<conditionalBlock refVariableValue="Item Rands">...</conditionalBlock>
<conditionalBlock refVariableValue="Item Units">...</conditionalBlock>
</conditionalBlockCases>
</conditionalBlocks>
</contents>
<style>...</style>
</pageBody>
<pageHeader>...</pageHeader>
<pageFooter>...</pageFooter>
<style>...</style>
<conditionalRender refVariable="vView">...</conditionalRender>
</page>
<page name="Page2">...</page>
</reportPages>
发生的事情是并引用:
使用标签名称作为属性将仅为您提供该名称的第一个标签。
如果要选择所有标签,则需要使用 find_all
方法,因为find_all
会扫描整个文档以查找结果。
如果find_all
找不到任何内容,它将返回一个空列表。
我建议您阅读美丽汤文档以获取更多详细信息。