2016-05-25 21 views
1

我有一個XML文件,我試圖讀取其中包含多行,但有2行我特別搜索。匹配文件中的2行

<intent-filter> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="myapp"/> 
</intent-filter> 

我想搜索android:scheme但只有在它之前或之後有「BROWSABLE」類別。如果這匹配,打印出來。

如果android:scheme是獨立的,並且沒有'BROWSABLE'屬性,請忽略它。

+1

XML通常不是一個很好用的情況下對正則表達式,特別是如果可以有嵌套的項目。空間可能被插入的各種不同方式也會使其膨脹。更好地使用真正的XML解析器。 –

+0

好的,謝謝,我正在研究一些XML解析器 – Jesm

+0

你能分享這個文件嗎? –

回答

0

這可以通過以下方式使用xmltodict來解決(使用pip install xmltodict第一安裝它):

我用此XML文件(在代碼命名爲「xml_stack_overflow_question.xml」):

<doc> 
<intent-filter> 
     <category android:name="android.intent.category.BROWSABLE"/> 
     <data android:scheme="myapp"/> 
</intent-filter> 
<intent-filter> 
     <category android:name="android.intent.category.NOTBROWSABLE"/> 
     <data android:scheme="myapp2"/> 
</intent-filter> 
</doc> 

和此代碼:

import xmltodict 

with open('xml_stack_overflow_question.xml') as f: 
    doc_file = xmltodict.parse(f.read()) 

for filter in (doc_file['doc']['intent-filter']): 
    if filter['category']['@android:name'] == "android.intent.category.BROWSABLE": 
     print "Match Found: " + filter['data']['@android:scheme'] 

輸出將是:

Match Found: myapp 

這意味着只有「可瀏覽」類別中的條目有取(而不是第二個是「 BROWSABLE」

+0

如果在第二種情況下是** NOT ** BROWSABLE,那麼這個類別根本沒有標籤,你可以簡單地檢查它的存在('doc_file'是一個'OrderedDict') – ShacharSh

相關問題