我需要找到符合2个条件的tag=ITEM,然后获取父级标记=节点@名称根据这个发现。在
两个问题:
例如,我找不到XPath执行“and”的方法
item = node.findall('./ITEM[@name="toppas_type" and @value="output file list"]')
获取父节点信息,而不必在查找项之前明确搜索和保存,例如
parent_name = item.parent.attrib['name']
这是我现在掌握的代码:
^{3}$…正在分析这样的文件(仅限代码段)。。。在
<?xml version="1.0" encoding="ISO-8859-1"?>
<PARAMETERS version="1.6.2" xsi:noNamespaceSchemaLocation="http://open-ms.sourceforge.net/schemas/Param_1_6_2.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NODE name="vertices" description="">
<NODE name="23" description="">
<ITEM name="recycle_output" value="false" type="string" description="" required="false" advanced="false" />
<ITEM name="toppas_type" value="tool" type="string" description="" required="false" advanced="false" />
<ITEM name="tool_name" value="FileConverter" type="string" description="" required="false" advanced="false" />
<ITEM name="tool_type" value="" type="string" description="" required="false" advanced="false" />
<ITEM name="x_pos" value="-620" type="double" description="" required="false" advanced="false" />
<ITEM name="y_pos" value="-1380" type="double" description="" required="false" advanced="false" />
</NODE>
<NODE name="24" description="">
<ITEM name="recycle_output" value="false" type="string" description="" required="false" advanced="false" />
<ITEM name="toppas_type" value="output file list" type="string" description="" required="false" advanced="false" />
<ITEM name="x_pos" value="-440" type="double" description="" required="false" advanced="false" />
<ITEM name="y_pos" value="-1480" type="double" description="" required="false" advanced="false" />
<ITEM name="output_folder_name" value="" type="string" description="" required="false" advanced="false" />
</NODE>
<NODE name="33" description="">
<ITEM name="recycle_output" value="false" type="string" description="" required="false" advanced="false" />
<ITEM name="toppas_type" value="merger" type="string" description="" required="false" advanced="false" />
<ITEM name="x_pos" value="-620" type="double" description="" required="false" advanced="false" />
<ITEM name="y_pos" value="-1540" type="double" description="" required="false" advanced="false" />
<ITEM name="round_based" value="false" type="string" description="" required="false" advanced="false" />
</NODE>
<!--(snip)-->
</NODE>
</PARAMETERS>
更新:
@Mathias Müller
很好的建议-不幸的是,当我试图加载XML文件时,我得到了一个错误。我不熟悉lxml…所以我不确定我是否正确地使用了它。在
from lxml import etree
root = etree.DTD("/Users/mikes/Documents/Eclipseworkspace/Bioproximity/Assay-Workflows-Mikes/protein_lfq/protein_lfq-1.1.2.toppas")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "src/lxml/dtd.pxi", line 294, in lxml.etree.DTD.__init__ (src/lxml/lxml.etree.c:187024)
lxml.etree.DTDParseError: Content error in the external subset, line 2, column 1
不幸的是,ElementTree在其树。查找(xpath)或树.findall(xpath)
也许根本不需要嵌套循环,一个XPath表达式就足够了。我不确定您希望最终的结果是什么,但下面是一个
lxml
的示例:如果您确实需要父元素的名称,可以使用
^{pr2}$..
移动到父节点:从文件解析XML文档
如果要从文件解析XML文档,函数
etree.DTD
是一个错误的选择。DTD不是XML文档。以下是如何使用lxml
完成此操作:第二次更新
如果最外层的元素是
PARAMETERS
,则需要如下搜索:相关问题 更多 >
编程相关推荐