2017-03-01 3 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