我有许多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'}
完成这项任务的正确方法是什么?你知道吗
当你说你有很多文件是从这4行开始的,如果你的意思是它们完全一样的话,最快的方法可能是完全忽略这一事实,即它是XML,而只是替换那些行。你知道吗
在Python中,只需阅读前四行,将它们与您期望的内容进行比较(这样,如果它们不匹配,您就可以发出警告),然后丢弃它们。写出你想要的新的四行,然后复制文件的其余部分。对每个文件重复上述步骤。你知道吗
另一方面,如果文件中其他地方有名称空间属性,则此方法将无法捕获这些属性,您可能应该使用真正的基于XML的解决方案。使用常规的SAX解析器,您可以在每个元素开始、元素结束、文本节点等出现时获得回调。因此,您只需将它们复制出来,直到找到所需的标记(在本例中是graphml元素),然后写出所需的新标记,而不是复制开始标记。然后回到复制。XSLT也是一种很好的方法,它可以让您编写一个小型的通用复印机,再加上一条处理graphml元素的规则。你知道吗
相关问题 更多 >
编程相关推荐