gpt4 book ai didi

Python 迷你世界/xml : How to set node text with minidom api

转载 作者:数据小太阳 更新时间:2023-10-29 01:51:37 27 4
gpt4 key购买 nike

我目前正在尝试加载一个 xml 文件并修改一对 xml 标记内的文本,如下所示:

   <anode>sometext</anode>

我目前有一个名为 getText 的辅助函数我用来获取文本 sometext多于。现在我需要修改 childnodes我想,在节点内部修改具有上面显示的 XML 片段的节点,以更改 sometextothertext .通用API补丁getText功能在下面的脚注中显示。

所以我的问题是,这就是我们获取文本的方式,我该如何编写一个名为 setText(node,'newtext') 的辅助辅助函数? .我更希望它在节点级别上运行,并自行找到通往子节点的路径,并且运行稳健。

上一个问题的可接受答案为“I'm not sure you can modify the DOM in place”。真的是这样吗? Minidom 是否已损坏到实际上是只读的?


通过脚注的方式,阅读 <anode> 之间的文本和 </anode> ,令我惊讶的是,不存在直接的简单单一 minidom 函数,Python xml 教程中建议使用这个小辅助函数:

import xml.dom.minidom

def getText(nodelist):
rc = []
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
rc.append(node.data)
return ''.join(rc)

# I've added this bit to make usage of the above clearer
def getTextFromNode(node):
return getText(node.childNodes)

Elsewhere在 StackOverflow 中,我看到了 2008 年接受的答案:

   node[0].firstChild.nodeValue

如果这就是用 minidom 阅读有多难,那么看到人们说“不要这样做!”我并不感到惊讶。当您询问如何编写可能会修改 XML 文档的节点结构的内容时。

更新 下面的答案表明它并不像我想象的那么难。

最佳答案

实际上 minidom 并不比其他 dom 解析器难用,如果你不喜欢它,你可以考虑向 w3c 投诉

from xml.dom.minidom import parseString

XML = """
<nodeA>
<nodeB>Text hello</nodeB>
<nodeC><noText></noText></nodeC>
</nodeA>
"""


def replaceText(node, newText):
if node.firstChild.nodeType != node.TEXT_NODE:
raise Exception("node does not contain text")

node.firstChild.replaceWholeText(newText)

def main():
doc = parseString(XML)

node = doc.getElementsByTagName('nodeB')[0]
replaceText(node, "Hello World")

print doc.toxml()

try:
node = doc.getElementsByTagName('nodeC')[0]
replaceText(node, "Hello World")
except:
print "error"


if __name__ == '__main__':
main()

关于Python 迷你世界/xml : How to set node text with minidom api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13588072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com