У меня есть большой XML-файл, который выглядит как один ниже. Я поставил только часть его, так как это> 2gb, так что вы видите структуру. В основном все SubNetwork parents
имеют ту же структуру, что и я, показанный ниже. Я хочу, чтобы извлечь только часть этого xml-файла с помощью <ManagedElementId string="xxxx" />
(где xxx i - входная переменная). Вот мой код и XML:Извлечь часть файла xml с python etree
<Create>
<SubNetwork networkType="GSM" userLabel="BSC">
.
.
</SubNetwork>
<SubNetwork networkType="WCDMA" userLabel="RNC01">
.
.
</SubNetwork>
<SubNetwork networkType="IPRAN" userLabel="IPRAN">
.
.
</SubNetwork>
<SubNetwork networkType="WCDMA" userLabel="RNC02">
<ManagedElement sourceType="CELLO">
<ManagedElementId string="3GALPAS" />
<primaryType type="RBS" />
.
.
</ManagedElement>
<ManagedElement sourceType="CELLO">
<ManagedElementId string="3GTUTI" />
<primaryType type="RBS" />
.
.
</ManagedElement>
<ManagedElement sourceType="CELLO">
<ManagedElementId string="3GHHH" />
<primaryType type="RBS" />
.
.
</ManagedElement>
</SubNetwork>
</Create>
и код
from xml.etree import ElementTree
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import XML, fromstring, tostring
from xml.etree.ElementTree import Element
from xml.etree.ElementTree import SubElement
from xml.etree.ElementTree import Element, SubElement, Comment
with open(r"C:\\Users\\etihkru\\Desktop\\h4.xml", 'rt') as f:
root = ET.parse(f)
tree=root.getroot()
with open(r"C:\\Users\\etihkru\\Desktop\\list_of_xxx", 'r') as f2:
for line in f2:
line=line.rstrip()
line1='"' + line + '"'
xp_str1 = str(('.//ManagedElementId[@string='))
xp_str2 = str("]/../../")
str_elem = xp_str1 + line1 + xp_str2
for item in tree.findall(str_elem):
print ET.tostring(item)
и файл list_of_xxx
как ниже:
3GALPAS
3GTUTI
Как сказал там numerues число <ManagedElementId string=/>
, и я просто хотите извлечь те, которые находятся в list_of_xxx
.
Так что я хочу, чтобы результат, как показано ниже:
<SubNetwork networkType="WCDMA" userLabel="RNC02">
<ManagedElement sourceType="CELLO">
<ManagedElementId string="3GALPAS" />
<primaryType type="RBS" />
.
.
</ManagedElement>
</SubNetwork>
<SubNetwork networkType="WCDMA" userLabel="RNC02">
<ManagedElement sourceType="CELLO">
<ManagedElementId string="3GTUTI" />
<primaryType type="RBS" />
.
.
</ManagedElement>
</SubNetwork>
Итак, я хочу, чтобы найти все ManagedElementIds
, как указано в list_of_xxx, и их родителей ManagedElement
и SubNetwork
, и записать их, как указано выше. Каждый MangedElementid
должен быть закрыт вместе с родителями. Я использую python 2.6 без lxml, так как я не имею права устанавливать его.
Что не работает о коде образца вы публикуемую? –
ну, я не получаю родителей, подсети и ManagedElement, и я хочу, чтобы это было на моем выходе. – user3319356