2013-07-08 2 views
0
<myroot> <data txt="some0" txt1 = "some1" txt2 = "some2" > 
       <data2> 
         < bank = "SBI" bank2 = "SBI2" > 
       <data2> 
       <data3> 
         <branch = "bang1" branch = "bang2" > 
       <data3> 
      </data> 

      <data txt="some0" txt1 = "some1" txt2 = "some2" > 
       <data2> 
         < bank = "citi" bank2 = "citi2" > 
       <data2> 
       <data3> 
         <branch = "bang3" branch = "bang4" > 
       <data3> 
      </data> </myroot> 

Данные, указанные выше, хранятся в переменной, не содержащей XML-файл. Я не могу разобрать его, потому что это не файл xml. пожалуйста, помогите мне, чтобы преобразовать данные в XML-формате/файл и анализировать то же самое, что ниже скрипта, который я пытаюсь:Как анализировать данные xml, которые хранятся в переменной?

stdout = "<myroot>%s</myroot>" % stdout 
print'main data', stdout 
tree = ElementTree.fromstring(stdout) 
tree1 = ET.parse('tree') 

В первой строке сценария я добавить корневую тег в данные и в основном данные xml, которые я показал выше, будут сохранены, тогда я пытаюсь разобрать его, но он выдает ошибку.

+0

Покажите нам свою ошибку. – refi64

ответ

0

Это ошибка, потому что ваш XML неверен.

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1301, in XML 
    parser.feed(text) 
    File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1643, in feed 
    self._raiseerror(v) 
    File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1507, in _raiseerror 
    raise err 
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 3, column 25 

Так что смотрите на Line3, колонка 25. тада

>>> stdout.split('\n')[2][25:] 
' bank = "SBI" bank2 = "SBI2" >' 
+0

: это ошибка Исключение: [Errno 2] Нет такого файла или каталога: 'tree' Traceback: Traceback (последний последний звонок): – user2558589

+0

@ user2558589, у вас есть файл или каталог с именем «tree»? –

+0

Нет, я сохраняю опцию ElementTree.fromstring (stdout) в переменной, называемой деревом, а затем пытается ее проанализировать. – user2558589

0

Он разбирает хорошо с BeautifulSoup:

>>> s = """<myroot> <data txt="some0" txt1 = "some1" txt2 = "some2" > 
...     <data2> 
...       < bank = "SBI" bank2 = "SBI2" > 
...     <data2> 
...     <data3> 
...       <branch = "bang1" branch = "bang2" > 
...     <data3> 
...    </data> 
... 
...    <data txt="some0" txt1 = "some1" txt2 = "some2" > 
...     <data2> 
...       < bank = "citi" bank2 = "citi2" > 
...     <data2> 
...     <data3> 
...       <branch = "bang3" branch = "bang4" > 
...     <data3> 
...    </data> </myroot>""" 

>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup(s) 
>>> print soup.prettify() 
<myroot> 
<data txt="some0" txt1="some1" txt2="some2"> 
    <data2> 
    &lt; bank = "SBI" bank2 = "SBI2" &gt; 
    <data2> 
    <data3> 
    <branch "bang1" = branch="bang2"> 
     <data3> 
     </data3> 
    </branch> 
    </data3> 
    </data2> 
    </data2> 
</data> 
<data txt="some0" txt1="some1" txt2="some2"> 
    <data2> 
    &lt; bank = "citi" bank2 = "citi2" &gt; 
    <data2> 
    <data3> 
    <branch "bang3" = branch="bang4"> 
     <data3> 
     </data3> 
    </branch> 
    </data3> 
    </data2> 
    </data2> 
</data> 
</myroot> 
Смежные вопросы