【发布时间】:2012-01-30 10:24:42
【问题描述】:
您好,我已经开始学习 python 并想用它来对 XML 文件做一些事情。
我一直在寻找有关最佳路线的信息,但坦率地说,我有点迷路了。有很多方法可以操作 XML 文件,如 ElementTree、lxml、minidom 等。有人能指出我正确的方向吗?或者给我一些我可以理解的代码。我已经开始尝试使用 lxml,但还没有进一步打印所有元素。
这是我想要做的:
- 从 csv 文件中读取一行。加载 Label 和 FullPath。
- 使用数学 FullPath 在 XML 文件中查找 ITEM
- 将该项目的 FLAG1 更改为 TRUE
- 将该项目的 FLAG2 和 FLAG3 更改为 FALSE
- 将该项目的标签更改为 CSV 文件中的标签。
- 写出new.xml
下面是我的 xml 结构。下面的两条记录在文件中重复了 10000 次。
<ThisIsMyData>
<ITEM>
<Number>0</Number>
<Flag1>TRUE</Flag1>
<Flag2>FALSE</Flag2>
<Flag3>FALSE</Flag3>
<Label>RED</Label> <<-2- After finding 1 I need to change THIS(only this)
<Path>C:\\test\\</Path> <-1- I need to find this
<file>test.png</file>
</ITEM>
<ITEM>
<Number>1</Number>
<Flag1>TRUE</Flag1>
<Flag2>FALSE</Flag2>
<Flag3>FALSE</Flag3>
<Label>Blue</Label>
<Path>c:\\test\\test2\\</Path>
<file>blue.png</file>
</ITEM>
</ThisIsMyData>
所以我有一个 ROOT : 然后很多元素:。 它们每个都有 7 个子元素。
这是我的 CSV 文件的样子,也是我需要输出的样子: CSV 文件:
Label;FullPath
YELLOW;C:\\test\\test.png
YELLOW;c:\\test\\test2\\blue.png
<ThisIsMyData>
<ITEM>
<Number>0</Number>
<Flag1>FALSE</Flag1>
<Flag2>FALSE</Flag2>
<Flag3>TRUE</Flag3>
<Label>YELLOW</Label>
<Path>C:\\test\\</Path>
<file>test.png</file>
</ITEM>
<ITEM>
<Number>1</Number>
<Flag1>FALSE</Flag1>
<Flag2>FALSE</Flag2>
<Flag3>TRUE</Flag3>
<Label>YELLOW</Label>
<Path>c:\\test\\test2\\</Path>
<file>blue.png</file>
</ITEM>
</ThisIsMyData>
Pastebin 链接以防布局混乱:
http://pastebin.com/embed_js.php?i=QEx2ZGuY
我现在正在使用以下示例尝试 ElementTree: http://pymotw.com/2/xml/etree/ElementTree/parse.html。我设法在 xml 中搜索某个元素名称并打印内容。但是我仍然看不到在同一级别上找到匹配元素的方法。
from xml.etree import ElementTree
with open('mydata.xml', 'rt') as f:
tree = ElementTree.parse(f)
# filelist = ElementTree.ElementTree.find()
for node in tree.findall('.//file'):
FileName = node.tag, node.text
print FileName
输出:
('file', 'test.png')
('file', 'blue.png')
【问题讨论】:
-
你可以用你提到的任何解析器做你想做的事。您能否更具体地说明您无法解决的问题?