如何用python修改xml标记中的属性值

2024-09-29 17:15:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有许多graphml文件,开头是:

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns/graphml"  
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml">

我需要更改xmlns和xsi属性,以反映此XML文件格式规范的正确值:

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns 
 http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">

我试着用BeautifulSoup改变这些值,比如:

soup = BeautifulSoup(myfile, 'html.parser')
soup.graphml['xmlns'] = 'http://graphml.graphdrawing.org/xmlns'
soup.graphml['xsi:schemalocation'] = "http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd"

它工作得很好,但是在我的一些较大的文件上它肯定太慢了,所以我尝试用lxml做同样的事情,但是我不知道如何达到同样的结果。我设法达到了这些属性,但不知道如何改变它们:

doc = etree.parse(myfile)
root = doc.getroot()
root.attrib
> {'{http://www.w3.org/2001/XMLSchema-instance}schemaLocation': 'http://graphml.graphdrawing.org/xmlns/graphml'}

完成这项任务的正确方法是什么?你知道吗


Tags: 文件instanceorghttpversionwwwxmlxmlschema
1条回答
网友
1楼 · 发布于 2024-09-29 17:15:52

当你说你有很多文件是从这4行开始的,如果你的意思是它们完全一样的话,最快的方法可能是完全忽略这一事实,即它是XML,而只是替换那些行。你知道吗

在Python中,只需阅读前四行,将它们与您期望的内容进行比较(这样,如果它们不匹配,您就可以发出警告),然后丢弃它们。写出你想要的新的四行,然后复制文件的其余部分。对每个文件重复上述步骤。你知道吗

另一方面,如果文件中其他地方有名称空间属性,则此方法将无法捕获这些属性,您可能应该使用真正的基于XML的解决方案。使用常规的SAX解析器,您可以在每个元素开始、元素结束、文本节点等出现时获得回调。因此,您只需将它们复制出来,直到找到所需的标记(在本例中是graphml元素),然后写出所需的新标记,而不是复制开始标记。然后回到复制。XSLT也是一种很好的方法,它可以让您编写一个小型的通用复印机,再加上一条处理graphml元素的规则。你知道吗

相关问题 更多 >

    热门问题