2017-03-01 70 views
1

我使用BeautifulSoup在Python中的XML文件的工作,以便处理XML文件用那种结构:蟒蛇/ BeautifulSoup使用字符串值来访问一个孩子OBJET /标签

<xml> 
    <headtag> 
    <subtag1>textA</subtag1> 
    <subtag2>textB</subtag2> 
    <anothertag>textC</anothertag> 
[...] 

现在我需要访问一个特定的子对象,通常是这样的:

print (BeautifulSoupObject.xml.headtag.subtag1.string) 

但在我的情况下,我都存储在一个字符串的子对象,如:

objIlikeToGet= 'xml.headtag.subtag1' 

我喜欢什么做的是类似的东西(伪):

print (BeautifulSoupObject.objIlikeToGet.string) 

所以我的问题:我如何可以使用字符串内容来直接访问BeautifulSoup子对象?

// btw:为什么我需要这个:我有一个配置文件,其中我定义了objIlikeToGet中的一些xml子对象,根据使用的配置文件只读取这些单个信息。这意味着一个脚本使用不同的配置文件并返回不同的信息。

回答

1

我建议使用eval。确保输入来自您而不是不可信来源。

html = """<xml> 
    <headtag> 
<subtag1>textA</subtag1> 
<subtag2>textB</subtag2> 
<anothertag>textC</anothertag> 
</headtag> 
</xml>""" 

soup = BeautifulSoup(html, 'lxml-xml') 

objIlikeToGet= "xml.headtag.subtag1" 

print(eval("soup." + objIlikeToGet + ".string")) 

输出:textA