Я пытаюсь использовать дерево элементов, чтобы найти интересующий элемент из XML и удалить всю группу (т. Е. Родительскую) из XML.Удаление определенных элементов из XML с помощью Etree
import xml.etree.ElementTree as ET
from lxml import etree
copasiML_str= IA.read_copasiML_as_string(model_file) # Reads XML as string
copasiML=ET.fromstring(copasiML_str) # parse XML to etree
for i in copasiML.findall(".//*[@name='ObjectCN']"): # locate element
if '[v18]' in i.attrib['value']: #search for 'v18'
if 'Parameter=V' in i.attrib['value']: #search for 'Parameter=V'
print i.attrib['value'] #Element identified
parent = i.getparent() #gets the parent of identified
copasiML.remove(parent) # This does not work
Этот код идентифицирует элемент и получает родительский элемент, который я хочу удалить. Тогда это дает мне ошибку, когда я пытаюсь удалить элемент:
ValueError: Element is not a child of this node.
XML-вопрос довольно сложный. Вот фрагмент:
<ParameterGroup name="FitItem">
<ParameterGroup name="Affected Cross Validation Experiments">
</ParameterGroup>
<ParameterGroup name="Affected Experiments">
<Parameter name="Experiment Key" type="key" value="Experiment_1"/>
<Parameter name="Experiment Key" type="key" value="Experiment_2"/>
<Parameter name="Experiment Key" type="key" value="Experiment_4"/>
</ParameterGroup>
<Parameter name="LowerBound" type="cn" value="1e-06"/>
<Parameter name="ObjectCN" type="cn" value="CN=Root,Model=NoName,Vector=Reactions[V18],ParameterGroup=Parameters,Parameter=V,Reference=Value"/>
<Parameter name="StartValue" type="float" value="0.1852208634119804"/>
<Parameter name="UpperBound" type="cn" value="100"/>
</ParameterGroup>
Есть много групп параметров FitItem. Я пытаюсь найти тот, у кого есть «[V18]» и «Parameter = V», и удалить весь FitItem. Кто-нибудь знает, как это сделать?
Благодаря
К сожалению, это была ошибка склеивание. Корень называется copasiML. – CiaranWelsh
Учитывая, что образец XML, родительский элемент '* [@ name = 'ObjectCN']' является корневым элементом, это означает, что вы пытаетесь удалить весь XML, который сделает его неверным. XML – har07
Пожалуйста, повторите проверку, я подозреваю в самом коде вы используете 'lxml' (' etree.fromstring() 'или аналогичный) вместо того, чтобы заполнить переменную' copasiML', потому что встроенный 'ElementTree' не имеет метода' getparent() ' – har07