2008-11-11 11 views
22

मैं एक xmlDoc की innerxml सेट लेकिन अपवाद प्राप्त करने के लिए कोशिश कर रहा हूँ के साथ काम करते हुए:संदर्भ एक्सएमएल

संदर्भ: अघोषित संस्था के लिए संदर्भ

XmlDocument xmldoc = new XmlDocument(); 
string text = "Hello, I am text α   – —" 
xmldoc.InnerXml = "<p>" + text + "</p>"; 

यह अपवाद फेंकता अविकसित इकाई 'अल्फा' के लिए। रेखा 2, स्थिति 2 ..

मैं इस समस्या को हल करने के बारे में कैसे जाउंगा?

उत्तर

26

एक्सएमएल & अल्फा के बजाय ऐसे,; & mdash; आदि का अनुवाद उनके संबंधित चरित्र में नहीं किया जाता है। आपको इसके बजाय संख्यात्मक मान का उपयोग करना होगा। आप केवल & लेफ्टिनेंट का उपयोग कर सकते हैं; और & amp; एक्सएमएल

यदि आप HTML बनाना चाहते हैं, तो इसके बजाय एक HTML दस्तावेज़ का उपयोग करें।

+2

एचटीएमएल दस्तावेज़ सिस्टम से आता है। Windows.Forms नामस्थान http://j.mp/pSmv82 यदि आप WebBrowser नियंत्रण के साथ अपने घनिष्ठ संबंध को पसंद नहीं करते हैं या जो आपके ऐप पर समस्याएं उत्पन्न करता है, तो एक शुद्ध HTML पार्सर उपलब्ध है एचटीएमएल एजिलिटी पैक http://htmlagilitypack.codeplex.com/wikipage?शीर्षक = उदाहरण –

6

विपरीत HTML निकाय (यूनिकोड वर्णों तक यानी नामित संदर्भ) तो & अल्फा को परिभाषित नहीं करता साथ

&#913; 
6

पिछला उत्तर सही है। एक अन्य विकल्प है कि अपने एचटीएमएल दस्तावेज़ को डीटीडी से लिंक करें जहां उन चरित्र इकाइयों को परिभाषित किया गया है, और यह मानक एक्सएचटीएमएल डीटीडी परिभाषा है।

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
      "http://www.w3.org/TR/html4/strict.dtd"> 
+0

आवेदन करने के तरीके के विवरण के लिए: http://azurator.blogspot.be/2012/03/parsing-html-into-xelement.html –

0

तुम भी "Hello, I am text α – —" को innerText सेट कर सकते हैं, XmlDocument उन्हें स्वचालित रूप से बच बनाने: अपने xml फ़ाइल निम्नलिखित घोषणा शामिल होना चाहिए। मुझे लगता है।

string text = XmlConvert.EncodeName("Hello &alpha;"); 

वैकल्पिक रूप से, आप एक DOCTYPE घोषणा में वर्ग कोष्ठक के बीच घोषणाओं रख कर स्थानीय स्तर पर संस्थाओं की घोषणा कर सकते हैं:

12

नेट में, आप System.Xml.XmlConvert वर्ग का उपयोग कर सकते हैं। अपने xml करने के लिए निम्न शीर्षलेख जोड़ें:

<!DOCTYPE documentElement[ 
<!ENTITY Alpha "&#913;"> 
<!ENTITY ndash "&#8211;"> 
<!ENTITY mdash "&#8212;"> 
]> 

इकाई परिभाषा के लिए "HTML चरित्र संस्थाओं" पर एक गूगल करो।

0

एचटीएमएल दस्तावेज़ का उपयोग मेरी स्थिति में उपयुक्त नहीं था, हमारे सिस्टम में एक कस्टम XmlUrlResolver था जिसे हमने एक्सएमएल लोड करने के लिए उपयोग किया था।

//setup 
public class CustomXmlResolver : XmlUrlResolver { /* ... */ } 
String originalXml; //fetched xml with html entities in it 

var doc = new XmlDocument(); 
doc.XmlResolver = new AdCastXmlResolver(); 

//making use of a transitional dtd 
doc.LoadXml("<!DOCTYPE html SYSTEM \"xhtml1-transitional.dtd\" > " + originalXml); 
-1

उपयोग स्ट्रिंग System.Net.WebUtility.HtmlDecode (स्ट्रिंग) जो अपने यूनिकोड संस्करण के लिए सभी HTML इकाई एन्कोड किए गए वर्ण डिकोड होगा। यह dot.net ढांचे से उपलब्ध है 4

0

यदि आप HTML इकाई नामों का उपयोग करना चाहते हैं, तो आप का उपयोग किया जाता है, डब्ल्यू 3 सी ने आपको कवर किया है और "वर्णों के लिए एक्सएमएल इकाई परिभाषाएं" http://www.w3.org/TR/xml-entity-names/ तैयार की है, जो अनिवार्य रूप से एक है नामित इकाइयों की सूची एचटीएमएल के समान ही है। लेकिन जैसा ऊपर बताया गया है, यह एक्सएमएल में नहीं बनाया गया है, और इन नामित इकाइयों का उपयोग करना चाहते हैं जो एक्सएमएल अनुप्रयोगों द्वारा स्पष्ट रूप से समर्थित होना चाहिए।

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