0
Я пытаюсь использовать lxml для чтения XML-файла и замены значений между тегами категории и подкатегорий.Идеальный XML-парсер для python
Я хочу перенаправить новый xml в новый файл.
data = """<xml>
<questionset author="Joee Foo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.escreeningz.com"
xsi:schemaLocation="http://www.escreeningz.com ../xsd/QuestionSet.xsd">
<question status="A" identifier="SampleQuestions.xml_1">
<classification>
<type>CONCEPTUAL</type>
<category>Core Java</category>
<subcategory>Exception Handling</subcategory>
<difficulty>2</difficulty>
</classification>
<tags>
<tag>Exception Hierarchy</tag>
<tag>Checked and Unchecked exceptions</tag>
<tag>Finally Block</tag>
</tags>
<preface>
<section order="1" type="STANDARD">
<value><![CDATA[Which of the statements regarding exceptions in Java are true?]]></value>
</section>
</preface>
<answers>
<answer correct="false" score="-4">
<value><![CDATA[Checked exceptions extend java.lang.RuntimeException.
]]></value>
<explain>It is uncheked exception that extend java.lang.Runtime;not checked</explain>
</answer>
<answer correct="true" score="5">
<value><![CDATA[The base class for all Exceptions and Errors is java.lang.Throwable.
]]></value>
</answer>
<answer correct="true" score="5">
<value><![CDATA[Any method that might throw a checked exception like java.io.IOException must either declare
the exception using the throws keyword or handle the exception with an appropriate try/catch.
]]></value>
</answer>
<answer correct="true" score="2">
<value><![CDATA[If you use a finally block, it will always be invoked regardless of whether an exception in the corresponding try is thrown or not
and regardless of whether a thrown exception is caught or not as long as the JVM is running.
]]></value>
</answer>
<answer correct="false" score="-4">
<value><![CDATA[All catch blocks must be ordered as general caught first to specific caught last]]></value>
<explain>All catch blocks must be ordered from specific to general</explain>
</answer>
</answers>
</question>
</questionset>
</xml>
"""
# csv to xml conversion
import sys
import os
import csv
import xml.etree.ElementTree as ET
from lxml import etree
from StringIO import StringIO
from lxml.etree import Element
stream = StringIO(data)
context = etree.iterparse(stream, events=("start",))
Теперь, когда я пытаюсь извлечь значение между и тегами, он возвращает пустой список. :(
for action,elem in context:
for child in elem.findall('{http://www.escreeningz.com}category'):
print child.attrib
Result is : {}
Когда я запускаю код, приведенный ниже, он возвращает тег правильно:
for action,elem in context:
for child in elem.findall('{http://www.escreeningz.com}category'):
print child.tag
Result: {http://www.escreeningz.com}category
Я пропускаю что-то здесь
я, наконец, нужно заменить
<category>Core Java</category>
.
с
<category>SQL</category>
Элемент категории не имеют атрибутов, поэтому FindAll находит элементы категории, и нет никаких признаков, чтобы найти среди них, поэтому он возвращается правильно. –
Есть ли способ найти текст между тегами категории? Возможно, мне придется перебирать текст между несколькими тегами. Но, это второй шаг, который я думаю. – Tammy
для вашего примера, принт child.text. Я предлагаю проверить документацию lxml и прочитать о структуре XML. –