2011-11-25 15 views
23

मैं एचटीएमएल टैग के आंतरिक पाठ को दूसरे टेक्स्ट से बदलना चाहता हूं। मैं HtmlAgilityPack
उपयोग कर रहा हूँ मैं सभी ग्रंथोंएचटीएमएलएगिलिटीपैक सेट नोड इनरटेक्स्ट

HtmlDocument doc = new HtmlDocument(); 
doc.Load("some path") 

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()[normalize-space(.) != '']")) { 
    // How to replace node.InnerText with some text ? 
} 

निकालने के लिए इस कोड का उपयोग लेकिन innerText केवल पढ़ने के लिए है। मैं ग्रंथों को किसी अन्य पाठ से कैसे बदल सकता हूं और उन्हें फ़ाइल में सहेज सकता हूं?

+0

करने के लिए बदल तत्व के भीतर पाठ सभी बच्चों का एक संयोजन भीतरी पाठ टैग है। क्या आप सभी बच्चों के टैग को टेक्स्ट नोड से बदलना चाहते हैं? –

+0

@YuriyRozhovetskiy मैं प्रत्येक तत्व पाठ को कुछ पाठ के साथ प्रतिस्थापित करना चाहता हूं, वास्तव में मैं किसी वेबसाइट को दूसरी भाषा में अनुवाद करना चाहता हूं। मैं किसी पृष्ठ से सभी टेक्स्ट निकालना चाहता हूं, फिर अनुवाद, प्रतिस्थापित और सहेजना चाहता हूं। – Shahin

+2

यह अजीब बात है कि एक्सएमएल दस्तावेज कहता है कि यह संपत्ति 'ऑब्जेक्ट के प्रारंभ और समाप्ति टैग के बीच पाठ को प्राप्त या सेट करती है।' लेकिन फिर केवल 'get' विधि प्रदान करती है ... – BrainSlugs83

उत्तर

19

नीचे कोड आज़माएं। यह बच्चों के बिना सभी नोड्स का चयन करता है और स्क्रिप्ट नोड फ़िल्टर करता है। शायद आपको कुछ अतिरिक्त फ़िल्टरिंग जोड़ने की जरूरत है। आपके XPath अभिव्यक्ति के अतिरिक्त यह भी पत्ती नोड्स की तलाश में है और <script> टैग की टेक्स्ट सामग्री को फ़िल्टर करता है।

var nodes = doc.DocumentNode.SelectNodes("//body//text()[(normalize-space(.) != '') and not(parent::script) and not(*)]"); 
foreach (HtmlNode htmlNode in nodes) 
{ 
    htmlNode.ParentNode.ReplaceChild(HtmlTextNode.CreateNode(htmlNode.InnerText + "_translated"), htmlNode); 
} 
+0

बहुत अच्छा धन्यवाद। मैं पिछली फ़ाइल में अनुवादित एचटीएमएल को कैसे ओवरराइट कर सकता हूं? मैं फाइल/ – Shahin

+0

से नोड लोड करता हूं! Doc.save .. बहुत बहुत धन्यवाद:] – Shahin

+0

यदि संभव हो तो कृपया वर्णन करें कि मेरे कोड XPath और आपके बीच क्या अंतर है? – Shahin

10

अजीब, लेकिन मैंने पाया कि इनर एचटीएमएल पढ़ा नहीं जाता है। और जब मुझे लगता है कि

aElement.InnerHtml = "sometext"; 

है जैसे कि यह स्थापित करने का प्रयास InnerText का मूल्य भी "sometext"

+1

लेकिन आप एचटीएमएल टैग को बदलने का मौका भी चलाते हैं – jnoreiga

+3

इनर एचटीएमएल केवल पढ़ा नहीं जाता है। इनरटेक्स्ट है। दस्तावेज इनरटेक्स्ट को पढ़ने के बारे में गलत नहीं लगता है। – liang

+0

जबकि 'इनर एचटीएमएल' कुछ स्थितियों में मिलता है/सेट का समर्थन करता है, यह हमेशा दस्तावेज़ सामग्री को वास्तव में परिवर्तित नहीं करता है। यदि आप इसे सेट करते हैं, और फिर दस्तावेज़ के 'OuterHtml' को देखते हैं, तो सामग्री हमेशा बदल नहीं जाती है। – Memetican

संबंधित मुद्दे