0

I can't quite make the leap despite pre-existing similar questions. Help would be valued!

  • I am trying to recursively parse all xml files in the directory/sub directory
  • I am looking for the value that appears for the tag "Operator id"

Example source XML:

<Operators>
   <Operator id="OId_LD">
   <OperatorCode>LD</OperatorCode>
   <OperatorShortName>ARRIVA THE SHIRES LIMIT</OperatorShortName>

This is the code I have thus far:

from xml.dom.minidom import parse
import os
def jarv(target_folder):
    for root,dirs,files in os.walk(target_folder):
        for targetfile in files:
            if targetfile.endswith(".xml"):
                print targetfile
                dom=parse(targetfile)
                name = dom.getElementsByTagName('Operator_id')
                print name[0].firstChild.nodeValue

This is the terminal command I am running:

python -c "execfile('xml_tag.py'); jarv('/Users/admin/Projects/AtoB_GTFS')"

And this is the error I receive:

tfl_64-31_-37434-y05.xml

encodings.xml
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "xml_tag.py", line 8, in jarv
    dom=parse(targetfile)
  File "/usr/local/Cellar/python/2.7.8_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/dom/minidom.py", line 1918, in parse
    return expatbuilder.parse(file)
  File "/usr/local/Cellar/python/2.7.8_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/dom/expatbuilder.py", line 922, in parse
    fp = open(file, 'rb')
IOError: [Errno 2] No such file or directory: 'encodings.xml'
(frigo)andytmac:AtoB_GTFS admin$ python -c "execfile('xml_tag.py'); jarv('/Users/admin/Projects/AtoB_GTFS')"
tfl_64-31_-37434-y05.xml

If I comment out the code after the 'print target file' line it does list all the xml files I have.

Thanks for your assistance,

Andy

1 Answer 1

1

You're not looking at the right place (relative path) : when you use for root, dirs, files in os.walk(target_folder):, files is a list of the file names in the directory root, and not their absolute path.

Try remplacing dom=parse(targetfile) by dom = parse(os.sep.join(root, targetfile))

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.