我看了好几篇文章,但还没有找到解决问题的答案。在
示例XML=
<TextWithNodes>
<Node id="0"/>TEXT1<Node id="19"/>TEXT2 <Node id="20"/>TEXT3<Node id="212"/>
</TextWithNodes>
所以我知道如果我把TextWithNodes
提取为NodeList
,我会做如下的事情
我只得到None
。我读过你必须写a.childNodes.nodeValue
,但是节点列表中没有子节点,因为看起来所有的Node
id都是结束标记?{{cd7>}如果{cd6>}使用。在
当我得到a
的节点类型时,它是类型1,TEXT_NODE
=3。我不确定这是否有用。在
我想提取TEXT1
,TEXT2
,等等
您应该为您的任务使用elementtreeapi而不是minidom(如其他答案所述),但是如果您需要使用minidom,这里有一个解决方案。在
您要查找的内容已作为^{} attribute 添加到DOM级别3。Minidom只支持级别1。在
但是,您可以使用此函数非常接近地模拟textContent:
你可以这样使用:
^{pr2}$注意我是如何得到父节点
TextWithNodes
的文本内容的。这是因为您的Node
元素是这些文本节点的同级,而不是它们的父级。在来自文档的
lxml
的解决方案:还可以提取特定节点的文本:
^{pr2}$这里的问题是XML中的文本不属于任何节点。在
使用^{} (类似于@diegonavro在他的答案中使用的lxml,除了etree是标准库的一部分,并且没有XPATH等),您可以尝试以下操作:
注意,这假设XML
<Node id="0"/>TEXT1
。。。是正确的。因为文本跟在结束标记之后,所以它成为标记的尾部文本。它不是元素nodeValue,这就是为什么在问题中的代码中得到None
s如果您想解析像
<Node id="0">TEXT1</Node>
这样的XML,您必须将[element.tail for element in xml_etree]
替换为[element.text for element in xml_etree]
。在相关问题 更多 >
编程相关推荐