समस्या यह है कि एक्सएमएल अच्छी तरह से गठित नहीं है। उचित रूप से जेनरेट एक्सएमएल इस तरह है कि डेटा की सूची जाएगा:
Prepaid & Charge
मैं पहले की तरह ही इस समस्या को ठीक करने के लिए मिला है, और मैं इस regex के साथ यह किया:
Regex badAmpersand = new Regex("&(?![a-zA-Z]{2,6};|#[0-9]{2,4};)");
कम्बाइन कि इस तरह एक स्ट्रिंग निरंतर परिभाषित किया गया है:
const string goodAmpersand = "&";
अब तुम सिर्फ कह सकते हैं badAmpersand.Replace(<your input>, goodAmpersand);
नोट है कि एक साधारण String.Replace("&", "&")
, काफी अच्छा नहीं है, क्योंकि आप पहले से दिए गए दस्तावेज़ के लिए किसी भी & अक्षरों को सही कूटबद्ध किया जाएगा कि क्या गलत रूप से भी एक ही दस्तावेज़ में दोनों पता नहीं कर सकते हैं, या ।
यहां कैच हैं कि आपको इसे अपने xml दस्तावेज़ पर से पहले अपने पार्सर में लोड करना है, जिसका अर्थ है कि इसके माध्यम से अतिरिक्त पास का मतलब है। इसके अलावा, यह एक सीडीएटीए अनुभाग के अंदर ampersands के लिए जिम्मेदार नहीं है। अंत में, यह केवल एम्पर्सेंड पकड़ता है, अन्य अवैध पात्रों जैसे <। अद्यतन: टिप्पणी के आधार पर, मुझे हेक्स-कोडेड (& #x ...;) इकाइयों के लिए अभिव्यक्ति को अपडेट करने की आवश्यकता है।
कौन से पात्र समस्याएं पैदा कर सकते हैं, वास्तविक नियम थोड़ा जटिल हैं। उदाहरण के लिए, डेटा में कुछ वर्णों की अनुमति है, लेकिन तत्व नाम के पहले अक्षर के रूप में नहीं। और अवैध पात्रों की कोई साधारण सूची नहीं है। इसके बजाए, यूनिकोड के एक बड़े (गैर-संगत) स्वैथ defined as legal है, और इसके बाहर कुछ भी अवैध है।
तो जब यह नीचे आता है, तो आपको कम से कम एक निश्चित मात्रा में अनुपालन और स्थिरता रखने के लिए अपने दस्तावेज़ स्रोत पर भरोसा करना होगा। उदाहरण के लिए, मैंने पाया है कि टैग अक्सर यह सुनिश्चित करने के लिए पर्याप्त स्मार्ट होते हैं कि टैग ठीक से काम करते हैं और < से बचते हैं, भले ही उन्हें पता न हो कि & की अनुमति नहीं है, इसलिए आज आपकी समस्या है। हालांकि, सबसे अच्छा बात स्रोत पर तय करने के लिए होगी।
ओह, और CDATA सुझाव के बारे में एक नोट: मैं का उपयोग करें कि यकीन है कि एक्सएमएल कि मैं बना रहा हूं बनाने के लिए अच्छी तरह से गठित है, लेकिन जब बाहर से मौजूदा एक्सएमएल के साथ काम कर, मैं regex विधि को खोजने आसान।
हेक्स-कोडेड ...; चरित्र संदर्भ भी मौजूद हो सकते हैं। मैं आमतौर पर दस्तावेज को पहले पार्स करने का प्रयास करने का सुझाव देता हूं, अगर कोई अच्छी तरह से गठित त्रुटि परिणाम होता है तो फिक्सअप हैक लागू करने का कोई भी प्रयास करें। फिर आप सुनिश्चित कर सकते हैं कि भविष्य में निर्धारित वैध दस्तावेज़ हमेशा ठीक से काम करेंगे। – bobince