解析 XML 并保存为 txt
Parse XML and save as txt
我想解析一个 xml 文件并将其保存为 txt 文件。
我的 XML- 文件如下所示:
我只对 INSTANCE
中的属性 class 感兴趣
<ADOXML adoversion="Version 5.1" username="Admin" database="adoxxdb" time="09:49" date="18.09.2019" version="3.1">
<MODELS>
<MODEL version="" applib="ADOxx 1.5 Dynamic Experimentation Library" libtype="bp" modeltype="DSML4VPL" name="DSML4VPL - new (2)" id="mod.29201">
<INSTANCE name="Online entry point-42200" id="obj.42200" class="Online entry point">
<ATTRIBUTE name="Position" type="STRING">NODE x:2cm y:4cm index:1</ATTRIBUTE>
<ATTRIBUTE name="External tool coupling" type="STRING"/>
</INSTANCE>
<INSTANCE name="Interact-42206" id="obj.42206" class="**Interact**">
<ATTRIBUTE name="Position" type="STRING">NODE x:7.5cm y:4cm index:2</ATTRIBUTE>
<ATTRIBUTE name="External tool coupling" type="STRING"/>
<ATTRIBUTE name="Comment" type="STRING"/>
<ATTRIBUTE name="Description" type="STRING"/>
<ATTRIBUTE name="Open Questions" type="STRING"/>
</INSTANCE>
<INSTANCE name="Select-42210" id="obj.42210" class="**Select**">
<ATTRIBUTE name="Position" type="STRING">NODE x:12.5cm y:4cm index:4</ATTRIBUTE>
<ATTRIBUTE name="External tool coupling" type="STRING"/>
<ATTRIBUTE name="Comment" type="STRING"/>
<ATTRIBUTE name="Description" type="STRING"/>
<ATTRIBUTE name="Open questions" type="STRING"/>
</INSTANCE>
</MODEL>
</MODELS>
</ADOXML>
我只想在 txt.file
中写下每个 class,例如 "Online entry point" 或 "Interact"
输出应该看起来像
Klassen
Online entry point
Interact
Select
我的代码如下所示:
import xml.etree.ElementTree as ET
tree=ET.parse("test1.xml")
root=tree.getroot()
with open("file3.txt","w")as f:
f.write("Class\n")
for xclass in root.findall("MODEL"):
Klasse=xclass.find("INSTANCE").get("class")
line_to_write=Klasse
with open("file3.txt","a") as f:
f.write(line_to_write)
但是,我现在不知道我做错了什么,没有错误信息,只是一个 txt.file 和 Class 里面。
问题是 findall 只搜索给定标签名称的元素的直接后代:ElementTree findall() returning empty list.
您可以简单地浏览所有元素标签和 select 您正在寻找的属性。
import xml.etree.ElementTree as ET
tree=ET.parse("test1.xml")
root=tree.getroot()
# Get "class" attribute of "INSTANCE" tags.
line_to_write = []
for xclass in root.iter("INSTANCE"):
line_to_write.append(xclass.get("class"))
# Writing to a file with space as delimiter
with open("file3.txt","w")as f:
f.write("Class\n")
f.write(" ".join([str(word) for word in line_to_write]))
我认为你很接近。
有几件事我不确定...
- 为什么要遍历
MODEL
?能有不止一个吗?每个 MODEL
都应该是一个单独的文本文件吗?
- 为什么要再次尝试打开文本文件?
根据您当前的示例,您应该能够使用 findall(".//INSTANCE")
遍历每个 INSTANCE
元素。
这是一个使用您提供的示例生成您请求的输出的示例...
import xml.etree.ElementTree as ET
tree = ET.parse("test1.xml")
with open("file3.txt", "w")as f:
f.write("Class\n")
for instance in tree.findall(".//INSTANCE"):
f.write(f"{instance.get('class')}\n")
我仍在写作和思考同样的问题,但现在我有了不同的目标。但是几乎是同样的问题,但我做不对。
我的 xml 文件如下所示:
<ADOXML adoversion="Version 5.1" username="Admin" database="adoxxdb" time="10:39" date="21.10.2019" version="3.1">
<MODELS>
<MODEL version="" applib="ADOxx 1.5 Dynamic Experimentation Library" libtype="bp" modeltype="Ressource Model" name="Ressource Model - new" id="mod.47204">
<MODELATTRIBUTES>
<INSTANCE name="Collection of written documents-49041" id="obj.49041" class="Collection of written documents">
<ATTRIBUTE name="Position" type="STRING">NODE x:7cm y:1.5cm index:1</ATTRIBUTE>
<ATTRIBUTE name="External tool coupling" type="STRING"/>
<ATTRIBUTE name="Comment" type="STRING"/>
<ATTRIBUTE name="Description" type="STRING"/>
<ATTRIBUTE name="Referenced Document" type="PROGRAMCALL">ITEM "" param:""</ATTRIBUTE>
<ATTRIBUTE name="Display file name" type="INTEGER">0</ATTRIBUTE>
<ATTRIBUTE name="Type of written documents" type="ENUMERATIONLIST">Demonstration;Portfolio</ATTRIBUTE>
</INSTANCE>
</MODEL>
</MODELS>
</ADOXML
我只对 class ATTRIBUTE 中的 type 属性感兴趣。我只想在文本文件
中显示值 Demonstration 和 Portfolio
我的代码:
import xml.etree.ElementTree as ET
tree=ET.parse(r"C:\Users\benni\Google Drive\MASTER\Masterarbeit\Coden\Resource.xml")
with open(r"C:\Users\benni\Google Drive\MASTER\Masterarbeit\Coden\Output88.txt", "w")as f:
f.write("Class\n")
for instance in tree.findall(".//ATTRIBUTE"):
f.write(f"{instance.get('type')}\n")
我知道这是同样的问题,但是,我找不到正确的方法或正确的路径来获取仅包含单词 Demonstration 和 投资组合
我想解析一个 xml 文件并将其保存为 txt 文件。
我的 XML- 文件如下所示:
我只对 INSTANCE
中的属性 class 感兴趣<ADOXML adoversion="Version 5.1" username="Admin" database="adoxxdb" time="09:49" date="18.09.2019" version="3.1">
<MODELS>
<MODEL version="" applib="ADOxx 1.5 Dynamic Experimentation Library" libtype="bp" modeltype="DSML4VPL" name="DSML4VPL - new (2)" id="mod.29201">
<INSTANCE name="Online entry point-42200" id="obj.42200" class="Online entry point">
<ATTRIBUTE name="Position" type="STRING">NODE x:2cm y:4cm index:1</ATTRIBUTE>
<ATTRIBUTE name="External tool coupling" type="STRING"/>
</INSTANCE>
<INSTANCE name="Interact-42206" id="obj.42206" class="**Interact**">
<ATTRIBUTE name="Position" type="STRING">NODE x:7.5cm y:4cm index:2</ATTRIBUTE>
<ATTRIBUTE name="External tool coupling" type="STRING"/>
<ATTRIBUTE name="Comment" type="STRING"/>
<ATTRIBUTE name="Description" type="STRING"/>
<ATTRIBUTE name="Open Questions" type="STRING"/>
</INSTANCE>
<INSTANCE name="Select-42210" id="obj.42210" class="**Select**">
<ATTRIBUTE name="Position" type="STRING">NODE x:12.5cm y:4cm index:4</ATTRIBUTE>
<ATTRIBUTE name="External tool coupling" type="STRING"/>
<ATTRIBUTE name="Comment" type="STRING"/>
<ATTRIBUTE name="Description" type="STRING"/>
<ATTRIBUTE name="Open questions" type="STRING"/>
</INSTANCE>
</MODEL>
</MODELS>
</ADOXML>
我只想在 txt.file
中写下每个 class,例如 "Online entry point" 或 "Interact"输出应该看起来像
Klassen
Online entry point
Interact
Select
我的代码如下所示:
import xml.etree.ElementTree as ET
tree=ET.parse("test1.xml")
root=tree.getroot()
with open("file3.txt","w")as f:
f.write("Class\n")
for xclass in root.findall("MODEL"):
Klasse=xclass.find("INSTANCE").get("class")
line_to_write=Klasse
with open("file3.txt","a") as f:
f.write(line_to_write)
但是,我现在不知道我做错了什么,没有错误信息,只是一个 txt.file 和 Class 里面。
问题是 findall 只搜索给定标签名称的元素的直接后代:ElementTree findall() returning empty list.
您可以简单地浏览所有元素标签和 select 您正在寻找的属性。
import xml.etree.ElementTree as ET
tree=ET.parse("test1.xml")
root=tree.getroot()
# Get "class" attribute of "INSTANCE" tags.
line_to_write = []
for xclass in root.iter("INSTANCE"):
line_to_write.append(xclass.get("class"))
# Writing to a file with space as delimiter
with open("file3.txt","w")as f:
f.write("Class\n")
f.write(" ".join([str(word) for word in line_to_write]))
我认为你很接近。
有几件事我不确定...
- 为什么要遍历
MODEL
?能有不止一个吗?每个MODEL
都应该是一个单独的文本文件吗? - 为什么要再次尝试打开文本文件?
根据您当前的示例,您应该能够使用 findall(".//INSTANCE")
遍历每个 INSTANCE
元素。
这是一个使用您提供的示例生成您请求的输出的示例...
import xml.etree.ElementTree as ET
tree = ET.parse("test1.xml")
with open("file3.txt", "w")as f:
f.write("Class\n")
for instance in tree.findall(".//INSTANCE"):
f.write(f"{instance.get('class')}\n")
我仍在写作和思考同样的问题,但现在我有了不同的目标。但是几乎是同样的问题,但我做不对。
我的 xml 文件如下所示:
<ADOXML adoversion="Version 5.1" username="Admin" database="adoxxdb" time="10:39" date="21.10.2019" version="3.1">
<MODELS>
<MODEL version="" applib="ADOxx 1.5 Dynamic Experimentation Library" libtype="bp" modeltype="Ressource Model" name="Ressource Model - new" id="mod.47204">
<MODELATTRIBUTES>
<INSTANCE name="Collection of written documents-49041" id="obj.49041" class="Collection of written documents">
<ATTRIBUTE name="Position" type="STRING">NODE x:7cm y:1.5cm index:1</ATTRIBUTE>
<ATTRIBUTE name="External tool coupling" type="STRING"/>
<ATTRIBUTE name="Comment" type="STRING"/>
<ATTRIBUTE name="Description" type="STRING"/>
<ATTRIBUTE name="Referenced Document" type="PROGRAMCALL">ITEM "" param:""</ATTRIBUTE>
<ATTRIBUTE name="Display file name" type="INTEGER">0</ATTRIBUTE>
<ATTRIBUTE name="Type of written documents" type="ENUMERATIONLIST">Demonstration;Portfolio</ATTRIBUTE>
</INSTANCE>
</MODEL>
</MODELS>
</ADOXML
我只对 class ATTRIBUTE 中的 type 属性感兴趣。我只想在文本文件
中显示值 Demonstration 和 Portfolio我的代码:
import xml.etree.ElementTree as ET
tree=ET.parse(r"C:\Users\benni\Google Drive\MASTER\Masterarbeit\Coden\Resource.xml")
with open(r"C:\Users\benni\Google Drive\MASTER\Masterarbeit\Coden\Output88.txt", "w")as f:
f.write("Class\n")
for instance in tree.findall(".//ATTRIBUTE"):
f.write(f"{instance.get('type')}\n")
我知道这是同样的问题,但是,我找不到正确的方法或正确的路径来获取仅包含单词 Demonstration 和 投资组合