खोज…


टिप्पणियों

XML इनपुट के सभी तत्व पार्स किए गए पेड़ के तत्वों के रूप में समाप्त नहीं होंगे। वर्तमान में, यह मॉड्यूल किसी भी XML टिप्पणियों, प्रोसेसिंग निर्देशों और इनपुट में दस्तावेज़ प्रकार की घोषणाओं से अधिक है। फिर भी, XML पाठ से पार्स करने के बजाय इस मॉड्यूल के एपीआई का उपयोग करके बनाए गए पेड़ों में टिप्पणियां और प्रसंस्करण निर्देश हो सकते हैं; XML आउटपुट जेनरेट करते समय उन्हें शामिल किया जाएगा।

एक ElementTree का उपयोग करके खोलना और पढ़ना

ElementTree ऑब्जेक्ट आयात करें, प्रासंगिक .xml फ़ाइल खोलें और रूट टैग प्राप्त करें:

import xml.etree.ElementTree as ET
tree = ET.parse("yourXMLfile.xml")
root = tree.getroot()

पेड़ के माध्यम से खोज करने के कुछ तरीके हैं। पहला पुनरावृति द्वारा है:

for child in root:
    print(child.tag, child.attrib)

अन्यथा आप सूची जैसे विशिष्ट स्थानों को संदर्भित कर सकते हैं:

print(root[0][1].text)

नाम से विशिष्ट टैग खोजने के लिए, .find या .findall उपयोग करें:

print(root.findall("myTag"))
print(root[0].find("myOtherTag"))

XML फ़ाइल को संशोधित करना

तत्व ट्री मॉड्यूल आयात करें और xml फ़ाइल खोलें, xml तत्व प्राप्त करें

import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root=tree.getroot()
element = root[0] #get first child of root element

तत्व वस्तु को अपने क्षेत्रों को बदलकर, विशेषताओं को जोड़कर और संशोधित करके, बच्चों को जोड़ने और हटाने के द्वारा हेरफेर किया जा सकता है

element.set('attribute_name', 'attribute_value') #set the attribute to xml element
element.text="string_text"

यदि आप तत्व का उपयोग करना चाहते हैं तो Element.remove () विधि का उपयोग करें

root.remove(element)

ElementTree.write () xml फ़ाइलों में xml ऑब्जेक्ट को आउटपुट करने के लिए उपयोग की जाने वाली विधि।

tree.write('output.xml')

XML दस्तावेज़ बनाएं और बनाएँ

तत्व पेड़ मॉड्यूल आयात करें

import xml.etree.ElementTree as ET

XML तत्वों को बनाने के लिए तत्व () फ़ंक्शन का उपयोग किया जाता है

p=ET.Element('parent')

उप-तत्व () फ़ंक्शन का उपयोग उप तत्व को एक तत्व बनाने के लिए किया जाता है

c = ET.SubElement(p, 'child1')

डंप () फ़ंक्शन का उपयोग xml तत्वों को डंप करने के लिए किया जाता है।

ET.dump(p)
# Output will be like this
#<parent><child1 /></parent>

यदि आप फ़ाइल को सहेजना चाहते हैं तो ElementTree () फ़ंक्शन के साथ एक xml ट्री बनाएं और फ़ाइल उपयोग लिखने () विधि में सेव करें

tree = ET.ElementTree(p)
tree.write("output.xml")

टिप्पणी () फ़ंक्शन का उपयोग xml फ़ाइल में टिप्पणियां डालने के लिए किया जाता है।

comment = ET.Comment('user comment')
p.append(comment) #this comment will be appended to parent element

इटर्पर (वृद्धिशील पार्सिंग) का उपयोग करके बड़ी एक्सएमएल फाइलें खोलना और पढ़ना

कभी-कभी हमें पूरी जानकारी प्राप्त करने के लिए संपूर्ण XML फ़ाइल को लोड नहीं करना पड़ता है। इन उदाहरणों में, प्रासंगिक अनुभागों को बढ़ाना और फिर समाप्त होने पर उन्हें हटा देना जब हम समाप्त हो जाते हैं तब उपयोगी होता है। पुनरावृति फ़ंक्शन के साथ आप XML को पार्स करते समय संग्रहीत तत्व ट्री को संपादित कर सकते हैं।

ElementTree ऑब्जेक्ट आयात करें:

import xml.etree.ElementTree as ET

सभी तत्वों पर .xml फ़ाइल खोलें और पुन: चलाएँ:

for event, elem in ET.iterparse("yourXMLfile.xml"):
    ... do something ...

वैकल्पिक रूप से, हम केवल विशिष्ट घटनाओं के लिए देख सकते हैं, जैसे कि प्रारंभ / समाप्ति टैग या नामस्थान। यदि यह विकल्प छोड़ दिया गया है (ऊपर के रूप में), केवल "अंत" ईवेंट लौटाए गए हैं:

events=("start", "end", "start-ns", "end-ns")
for event, elem in ET.iterparse("yourXMLfile.xml", events=events):
    ... do something ...

यहां पूरा उदाहरण दिखाया गया है कि इन-मेमोरी ट्री से तत्वों को कैसे साफ किया जाए जब हम उनके साथ समाप्त हो जाते हैं:

for event, elem in ET.iterparse("yourXMLfile.xml", events=("start","end")):        
    if elem.tag == "record_tag" and event == "end":
        print elem.text
        elem.clear()
    ... do something else ...

XPath के साथ XML खोजना

संस्करण 2.7 के साथ शुरू ElementTree XPath प्रश्नों के लिए एक बेहतर समर्थन है। XPath एक सिंटैक्स है जो आपको एक xml के माध्यम से नेविगेट करने में सक्षम करता है जैसे SQL का उपयोग डेटाबेस के माध्यम से खोज करने के लिए किया जाता है। दोनों find और findall कार्यों XPath समर्थन करते हैं। इस उदाहरण के लिए नीचे दी गई xml का उपयोग किया जाएगा

 <Catalog>
    <Books>
        <Book id="1" price="7.95">
            <Title>Do Androids Dream of Electric Sheep?</Title>
            <Author>Philip K. Dick</Author>
        </Book>
        <Book id="5" price="5.95">
            <Title>The Colour of Magic</Title>
            <Author>Terry Pratchett</Author>
        </Book>
        <Book id="7" price="6.95">
            <Title>The Eye of The World</Title>
            <Author>Robert Jordan</Author>
        </Book>
    </Books>
</Catalog>

सभी पुस्तकों की खोज:

import xml.etree.cElementTree as ET
tree = ET.parse('sample.xml')
tree.findall('Books/Book')

शीर्षक के साथ पुस्तक की खोज = 'जादू का रंग':

tree.find("Books/Book[Title='The Colour of Magic']") 
# always use '' in the right side of the comparison

आईडी के साथ पुस्तक के लिए खोज = 5:

tree.find("Books/Book[@id='5']")
# searches with xml attributes must have '@' before the name

दूसरी पुस्तक खोजें:

tree.find("Books/Book[2]")
# indexes starts at 1, not 0

अंतिम पुस्तक खोजें:

tree.find("Books/Book[last()]")
# 'last' is the only xpath function allowed in ElementTree

सभी लेखकों के लिए खोजें:

tree.findall(".//Author")
#searches with // must use a relative path


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow