Finding all instances of a string in an XML file

Discussion in 'Python' started by Jason Friedman, Jun 21, 2013.

  1. I have XML which looks like:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE KMART SYSTEM "my.dtd">
    <LEVEL_1>
    <LEVEL_2 ATTR="hello">
    <ATTRIBUTE NAME="Property X" VALUE ="2"/>
    </LEVEL_2>
    <LEVEL_2 ATTR="goodbye">
    <ATTRIBUTE NAME="Property Y" VALUE ="NULL"/>
    <LEVEL_3 ATTR="aloha">
    <ATTRIBUTE NAME="Property X" VALUE ="3"/>
    </LEVEL_3>
    <ATTRIBUTE NAME="Property Z" VALUE ="welcome"/>
    </LEVEL_2>
    </LEVEL_1>

    The "Property X" string appears twice times and I want to output the "path"
    that leads to all such appearances. In this case the output would be:

    LEVEL_1 {}, LEVEL_2 {"ATTR": "hello"}, ATTRIBUTE {"NAME": "Property X",
    "VALUE": "2"}
    LEVEL_1 {}, LEVEL_2 {"ATTR": "goodbye"}, LEVEL_3 {"ATTR": "aloha"},
    ATTRIBUTE {"NAME": "Property X", "VALUE": "3"}

    My actual XML file is 2000 lines and contains up to 8 levels of nesting.

    I have tried this so far (partial code, using the xml.etree.ElementTree
    module):
    def get_path(data_dictionary, val, path):
    for node in data_dictionary[CHILDREN]:
    if node[CHILDREN]:
    if not path or node[TAG] != path[-1]:
    path.append(node[TAG])
    print(CR + "recursing ...")
    get_path(node, val, path)
    else:
    for k,v in node[ATTRIB].items():
    if v == val:
    print("path- ",path)
    print("---- " + node[TAG] + " " + str(node[ATTRIB]))

    I'm really not even close to getting the output I am looking for.
    Python 3.2.2.
    Thank you.
    Jason Friedman, Jun 21, 2013
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. John Wohlbier
    Replies:
    2
    Views:
    366
    Josiah Carlson
    Feb 22, 2004
  2. Peter Otten
    Replies:
    0
    Views:
    130
    Peter Otten
    Jun 21, 2013
  3. dieter
    Replies:
    0
    Views:
    115
    dieter
    Jun 21, 2013
  4. Jason Friedman
    Replies:
    0
    Views:
    117
    Jason Friedman
    Jun 21, 2013
  5. Jason Friedman
    Replies:
    0
    Views:
    128
    Jason Friedman
    Jun 23, 2013
Loading...

Share This Page