के साथ एक्सएमएल से डुप्लिकेट विशेषताओं को कैसे हटाएं मैं किसी तृतीय पक्ष प्रदाता से कुछ एक्सएमएल फाइलों को पार्स कर रहा हूं और दुर्भाग्यवश यह हमेशा अच्छी तरह से गठित एक्सएमएल नहीं है क्योंकि कभी-कभी कुछ तत्वों में डुप्लिकेट गुण होते हैं।सी #
मेरे पास स्रोत पर नियंत्रण नहीं है और मुझे नहीं पता कि कौन से तत्वों में डुप्लिकेट विशेषता हो सकती है और न ही मैं पहले से ही डुप्लिकेट विशेषता नामों को जानता हूं।
जाहिर है, एक XMLDocument
वस्तु में सामग्री लोड डुप्लिकेट पर एक XmlException तो मैं हालांकि मैं एक XmlReader
इस्तेमाल कर सकते हैं तत्व द्वारा हालांकि XML तत्व कदम और सौदा डुप्लिकेट के साथ जिम्मेदार बताते हैं, जब मैं अपमानजनक तत्व को पाने के लिए विशेषताओं को जन्म देती है।
हालांकि, XmlException
reader.Read()
पर उठाया गया है - इससे पहले कि मुझे तत्व के गुणों की खोज करने का मौका मिले।
public static void ParseTest()
{
const string xmlString =
@"<?xml version='1.0'?>
<!-- This is a sample XML document -->
<Items dupattr=""10"" id=""20"" dupattr=""33"">
<Item>test with a child element <more/> stuff</Item>
</Items>";
var output = new StringBuilder();
using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
{
XmlWriterSettings ws = new XmlWriterSettings();
ws.Indent = true;
using (XmlWriter writer = XmlWriter.Create(output, ws))
{
while (reader.Read()) /* Exception throw here when Items element encountered */
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
writer.WriteStartElement(reader.Name);
if (reader.HasAttributes){ /* CopyNonDuplicateAttributes(); */}
break;
case XmlNodeType.Text:
writer.WriteString(reader.Value);
break;
case XmlNodeType.XmlDeclaration:
case XmlNodeType.ProcessingInstruction:
writer.WriteProcessingInstruction(reader.Name, reader.Value);
break;
case XmlNodeType.Comment:
writer.WriteComment(reader.Value);
break;
case XmlNodeType.EndElement:
writer.WriteFullEndElement();
break;
}
}
}
}
string str = output.ToString();
}
वहाँ एक और तरीका है इनपुट को पार्स और नियमित अभिव्यक्ति और स्ट्रिंग परिवर्तन का उपयोग किए बिना डुप्लिकेट विशेषताओं को दूर करने के है:
यहाँ मुद्दा प्रदर्शित करने के लिए एक नमूना विधि है?
यह केवल तभी संभव हो सकता है जब एक्सएमएल प्रोसेसर एपीआई प्रदाता किसी भी हुक जो आपको प्रसंस्करण में हुक करने और त्रुटि शर्तों को संभालने की अनुमति देता है – Ankur
दिलचस्प समस्या, समाधान देखने के लिए तत्पर हैं! –
एक्सएमएल का उपयोग कर इस समस्या का कोई समाधान नहीं होगा, क्योंकि आपका इनपुट एक्सएमएल नहीं है। आप कहते हैं कि आपके पास इनपुट पर कोई नियंत्रण नहीं है, लेकिन क्या आप कम से कम अपने वरिष्ठों को यह जान सकते हैं कि आपका विक्रेता आपको एक्सएमएल नहीं भेज रहा है? क्या आप कम से कम यह सुनिश्चित कर सकते हैं कि आपका _vendor_ यह जानता है?इस डेटा को भेजने के लिए पर्याप्त कोई भी मूर्ख बेवकूफ हो सकता है यह महसूस करने के लिए पर्याप्त नहीं है कि यह एक्सएमएल नहीं है। –