如何在XML文件中搜索值

时间:2015-04-10 14:31:03

标签: python xml

我现在一直在寻找几个小时的答案,但我似乎找不到如何在XML文件中查找标记并提取其价值的简单答案。例如:

<?xml version="1.0" encoding="UTF-8"?>
<record name="test111.xml" type="content">
    <item name="Metadata">
        <value>
            <item name="label1">
                <value>
                    <item name="dummy1">
                        <value />
                    </item>
                </value>
            </item>
            <item name="Source">
                <value>test</value>
            </item>
            <item name="Channel">
                <value>celebrate</value>
            </item>
            <item name="Catref">
                <value>cat150032</value>
            </item>
            <item name="ParentsSource" />
            <item name="MobileFriendly" />
            <item name="VirtualPath">
                <value>/testFolder/testItem</value>
            </item>
            <item name="VirtualFileName">
                <value>sweets/</value>
            </item>
            <item name="RefreshMode">
                <value>soft</value>
            </item>
            <item name="label2">
                <value>
                    <item name="dummy2">
                        <value />
                    </item>
                </value>
            </item>
        </value>
    </item>
</record>

在这种情况下,我试图将VirtualPath的值设为/testFolder/testItem,可能更多。

from __future__ import print_function
import os

folderArray = ['\test1', '\test2', '\test3', '\test4']
path = 'D:\Projects\test'
for i in range(0, len(folderArray)):
    tempPath = path + folderArray[i]
    for root, dirs, files in os.walk(tempPath):
        for file in files:
            if file.endswith(".xml"):
                if (folderArray[0]):
                #  LOOK ONLY FOR VIRTUAL PATH
                    f = open(tempPath, 'r')
                    for line in f:
                        if "VirtualPath" in line:
                        # HERE FIND THE VALUE OF THE TAG

打开XML文件后,我不知道如何查找特定标记并查找其值。我知道我可以做一个indexof并将值输出子串,但这不是最有效的方法。

修改

玩了一下之后找到了答案。我知道这有重复但我在创建这个问题之前并不知道。 答案:

from __future__ import print_function
import os
from xml.dom import minidom

folderArray = ['\test1', '\test2', '\test3', '\test4']
path = 'D:\Projects\test'
for i in range(0, len(folderArray)):
tempPath = path + folderArray[i]
for root, dirs, files in os.walk(tempPath):
    for file in files:
        if file.endswith(".xml"):
           xmldoc = minidom.parse(tempPath + '\\' + file)
           itemlist = xmldoc.getElementsByTagName('item')
           for s in itemlist:
               if (s.attributes['name'].value == 'VirtualPath'):
                   print(s.childNodes[0].firstChild.nodeValue)

0 个答案:

没有答案