ये अच्छा जवाब, जो कर रहे हैं ओपी के सवाल का जवाब दें, खासकर यदि प्रश्न एचटीएमएल तक ही सीमित है। लेकिन दस्तावेज़ स्वाभाविक रूप से गन्दा हैं, और तत्व घोंसले की गहराई आमतौर पर भविष्यवाणी करना असंभव है।
डोम के getTextContent() को अनुकरण करने के लिए आपको एक (बहुत) सरल रिकर्सिव तंत्र का उपयोग करना होगा।
def get_deep_text(element):
text = element.text or ''
for subelement in element:
text += get_deep_text(subelement)
text += element.tail or ''
return text
print(get_deep_text(element_of_interest))
कच्चे पाठ के बीच की सीमाओं के बारे में सभी जानकारी प्राप्त करने के लिए:: लिब्रे ऑफिस लेखक दस्तावेज़ में एक पैरा से
root_el_of_interest.element_count = 0
def get_deep_text_w_boundaries(element, depth = 0):
root_el_of_interest.element_count += 1
element_no = root_el_of_interest.element_count
indent = depth * ' '
text1 = '%s(el %d - attribs: %s)\n' % (indent, element_no, element.attrib,)
text1 += '%s(el %d - text: |%s|)' % (indent, element_no, element.text or '',)
print(text1)
for subelement in element:
get_deep_text_w_boundaries(subelement, depth + 1)
text2 = '%s(el %d - tail: |%s|)' % (indent, element_no, element.tail or '',)
print(text2)
get_deep_text_w_boundaries(root_el_of_interest)
उदाहरण आउटपुट (.fodt फ़ाइल
सिर्फ नंगे पाठ प्राप्त करने के लिए):
(el 1 - attribs: {'{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name': 'Standard'})
(el 1 - text: |Ci-après individuellement la "|)
(el 2 - attribs: {'{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name': 'T5'})
(el 2 - text: |Partie|)
(el 2 - tail: |" et ensemble les "|)
(el 3 - attribs: {'{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name': 'T5'})
(el 3 - text: |Parties|)
(el 3 - tail: |", |)
(el 1 - tail: |
|)
गड़बड़ी के बारे में एक बिंदु यह है कि कोई कठोर और तेज़ नियम नहीं है जब एक पाठ शैली एक शब्द सीमा इंगित करती है और जब यह नहीं होती है: एक शब्द (बिना सफेद स्थान के) के तुरंत बाद सुपरस्क्रिप्ट का अर्थ है सभी उपयोग मामलों में एक अलग शब्द जिसका मैं कल्पना कर सकता हूं। ओटीओएच कभी-कभी आपको मिल सकता है, उदाहरण के लिए, एक दस्तावेज़ जहां पहला अक्षर या तो किसी कारण से बोल्ड किया जाता है, या शायद सामान्य यूसी चरित्र का उपयोग करने के बजाय इसे ऊपरी मामले के रूप में प्रस्तुत करने के लिए पहले अक्षर के लिए एक अलग शैली का उपयोग करता है।
और निश्चित रूप से कम मुख्य रूप से "अंग्रेजी-केंद्रित" इस चर्चा में सूक्ष्मता और जटिलताओं को अधिक से अधिक मिलता है!
जब कोई टेक्स्ट या कोई पूंछ नहीं है तो यह असफल होगा, है ना? – PEZ
पीईजेड, हाँ, जब कोई टेक्स्ट नहीं होता है तो यह विफल रहता है, बस इसे मेरे कोड को चलाकर और इसे ठीक करके पाया जाता है। मेरे पास पूंछ के कई उदाहरण हैं और यह असफल नहीं होता है। यकीन नहीं है कि क्यों। – Pablo
बस एक नाइटपिक: + = तारों पर कम प्रदर्शनकारी है। स्ट्रिंग्स और '' की एक सूची जमा करना सबसे अच्छा है। अंत में इसे शामिल करें। – cdleary