У меня есть два файла XML, которые я пытаюсь объединить.Объединяйте XML-файлы везде, где идентификатор атрибута один и тот же Python
XML1:
<hierachyAttributes>
<attribute>
<displayOrder>2</displayOrder>
<attributeID>Demographics</attributeID>
<children>
<attribute>
<displayOrder>1</displayOrder>
<attributeID>age</attributeID>
</children>
</attribute>
</hierachyAttributes>
xml2:
<diseaseAttributes>
<diseaseName>Cancer</diseaseName>
<diseaseID>1322843</diseaseID>
<metaAttributes>
<attribute>
<description>Age</description>
<displayName>Age (years)</displayName>
<attributeID>age</attributeID>
<type>Double</type>
<attributeCategory>Clinical</attributeCategory>
<displayInSummary>TRUE</displayInSummary>
<group>
<displayOrder>1</displayOrder>
<displayName>0 - < 10</displayName>
<minValue>0</minValue>
<minInclusive>TRUE</minInclusive>
<maxValue>10</maxValue>
<maxInclusive>FALSE</maxInclusive>
</group>
</valueGroups>
</attribute>
</metaAttributes>
</diseaseAttributes>
Есть ли способ, чтобы объединить их, как показано ниже, даже с разными корневыми тегов, в данном случае hierachyAttributes и diseaseAttributes? CombinedXML:
<hierachyAttributes>
<diseaseAttributes>
<diseaseName>Cancer</diseaseName>
<diseaseID>1322843</diseaseID>
<metaAttributes>
<attribute>
<displayOrder>2</displayOrder>
<attributeID>Demographics</attributeID>
<children>
<attribute>
<displayOrder>1</displayOrder>
<attributeID>age</attributeID>
<description>Age</description>
<displayName>Age (years)</displayName>
<type>Double</type>
<attributeCategory>Clinical</attributeCategory>
<displayInSummary>TRUE</displayInSummary>
<group>
<displayOrder>1</displayOrder>
<displayName>0 - < 10</displayName>
<minValue>0</minValue>
<minInclusive>TRUE</minInclusive>
<maxValue>10</maxValue>
<maxInclusive>FALSE</maxInclusive>
</group>
</valueGroups>
</attribute>
</children>
</metaAttributes>
</diseaseAttributes>
</hierachyAttributes>
т.е. объединить их везде, где attributeID такое же. Я попробовал следующее, но он объединил один файл xml за другим.
#!/usr/bin/env python
import sys
from xml.etree import ElementTree
def run(files):
first = None
for filename in files:
data = ElementTree.parse(filename).getroot()
if first is None:
first = data
else:
first.extend(data)
if first is not None:
print ElementTree.tostring(first)
if __name__ == "__main__":
run(sys.argv[1:])
Или, если тег заменяется, и я хочу такой же вывод, но под одним корневым узлом, т.е. diseaseAttributes, как можно достичь этого?
Я просто разместил части файлов XML. Поэтому, пожалуйста, игнорируйте любые несоответствующие теги. В конечном счете, я хотел бы объединить два файла, когда атрибуты одинаковы, я не хочу указывать его на «возраст» или «рак» в целом. Я бы хотел, чтобы он работал для каждого атрибута и root. – abn
Объединить как? Единственное, что у них обоих есть: 1 attributeID> ', где-то в обоих, но вы даже не сказали, какой XML-документ является тем, с кем вы сливаетесь, и который он собирается, но только оба корневых элемента на выходе просто для того, чтобы сделать его ошибочным и более запутанным. Этот процесс не является - ваш «вывод» должен как-то сделать его более запутанным. –
spiralx