xml - पायथन एक्सएमएल एट्री एलीमेंटट्री में रूट एट्रिब्यूट से एट्रिब्यूट को कैसे निकालें




python-2.7 xml-parsing (2)

मानक लाइब्रेरी में xml.etree.ElementTree विशेषता को निकालने के लिए कोई विशेष पद्धति नहीं है, लेकिन सभी विशेषताओं को एट्रिब में संग्रहित किया जाता है जो एक शब्द है और एट्रिब से कोई विशेषता किसी कुंजी से एक कुंजी के रूप में हटाया जा सकता है:

    import xml.etree.ElementTree as ET

    tree = ET.parse(file_path)
    root = tree.getroot()      

    print(root.attrib)  # {'xyz': '123'}

    root.attrib.pop("xyz", None)  # None is to not raise an exception if xyz does not exist

    print(root.attrib)  # {}

    ET.tostring(root)
    '<urlset> <url> <changefreq>daily</changefreq> <loc>http://www.example.com</loc></url></urlset>'

https://code.i-harness.com

मेरी फ़ाइल में निम्न डेटा शामिल है:

मूल:

<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <changefreq>daily</changefreq> <loc>http://www.example.com</loc></url></urlset>

अपेक्षित होना:

<?xml version="1.0" encoding="UTF-8"?><urlset> <url> <changefreq>daily</changefreq> <loc>http://www.example.com</loc></url></urlset>

मैं फ़ाइल को पार्स करने के लिए etree का उपयोग करता हूं और मैं मूल तत्व 'urlset' से विशेषता को निकालना चाहता हूं

import xml.etree.ElementTree as ET

tree = ET.parse("/Users/hsyang/Downloads/VI-0-11-14-2016_20.xml")
root = tree.getroot()

print root.attrib
>> {}

root.attrib.pop("xmlns", None)

print root.attrib
>> {}
ET.tostring(root)

मैंने सोचा कि मुझे {xmlns: " http://www.sitemaps.org/schemas/sitemap/0.9 "} प्राप्त करना चाहिए था जब मैंने पहली बार रूट को प्रिंट किया था.ट्रिब्रिब पहली बार है लेकिन मेरे पास एक खाली शब्दकोष है क्या कोई मदद कर सकता है?

इसकी प्रशंसा करना!


xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" एक नियमित विशेषता की तरह दिखता है लेकिन यह एक विशेष मामला है, अर्थात् एक नेमस्पेस घोषणा।

नामस्थान को हटाने, जोड़ना, या संशोधित करना काफी कठिन हो सकता है। "सामान्य" विशेषताओं को एक तत्व के attrib योग्य attrib संपत्ति में संग्रहीत किया जाता है। दूसरी ओर नामस्थान मैपिंग एपीआई के माध्यम से आसानी से उपलब्ध नहीं हैं ( nsmap लाइब्रेरी में, तत्वों को nsmap संपत्ति होती है, लेकिन यह केवल पढ़ने के लिए है)।

मैं सुझाव देता हूं कि एक साधारण पाठ्य खोज और प्रतिस्थापन ऑपरेशन, एलसीडीएल के साथ किसी दिए गए xml दस्तावेज़ में नामों को संशोधित करने के उत्तर के समान है। कुछ इस तरह:

with open("input.xml", "r") as infile, open("output.xml", "w") as outfile:
    data = infile.read()
    data = data.replace(' xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"', '')
    outfile.write(data)

यह भी देखें कि नेमस्पेस और उपसर्गों को पायथन के साथ XML स्ट्रिंग में कैसे डालें? ।





xml-sitemap