मैं .NET में आसानी से एक्सएमएल इकाइयों से कैसे बच सकता हूं

मेरे पास कुछ कोड है जो एक XMLNode के लिए InnerXML देता है।

नोड में केवल कुछ पाठ (HTML के साथ) या एक्सएमएल हो सकता है।

उदाहरण के लिए:


    Here is some <strong>HTML</strong>

या


    Here is some content

if I get the InnerXML fया the HTML tags are returned as xml entities.

I cannot use InnerText because I need to be able to get the xml contents. So all I really need is a way to un-escape the HTML tags, because I can detect if it's xml या not and act accयाdingly.

मुझे लगता है कि मैं HTMLDecode का उपयोग कर सकता हूं, लेकिन क्या यह सभी एक्सएमएल एन्कोडेड इकाइयों को डीकोड करेगा?

Update: I guess I'm rambling a bit above so here is a clarified scenario:

मेरे पास एक एक्सएमएल दस्तावेज़ है जो इस तरह दिखता है:


    <p>A Test</p>


    
        A test
    

यदि मैं करता हूँ:

XmlNode xn1 = document.SelectSingleNode("/content[@id=1]/data");
XmlNode xn2 = document.SelectSingleNode("/content[@id=2]/data");

Console.WriteLine(xn1.InnerXml);
Console.WriteLine(xn2.InnerXml);    

xn1 वापस आ जाएगा

 <p>A Test</p>

xn2 will return A test

मैं पहले से ही यह देखने के लिए जांच कर रहा हूं कि क्या लौटाया गया है एक्सएमएल (xn2 के मामले में) तो मुझे बस इतना करना है कि xn1 में & lt; आदि से बचें।

HTMLDecode does this, but I'm not sure it would wयाk fया everything. So the question remains would HTMLDecode handle all the possible entities या is there a class somewhere that will do it fया me.

2

3 उत्तर

आपका प्रश्न पालन करना थोड़ा मुश्किल है। यहां वे चीजें हैं जिन्हें मैंने पूरी तरह से समझ नहीं लिया:

  1. यदि आप XmlNode/XmlElement ऑब्जेक्ट्स का उपयोग कर रहे हैं, तो आप xml के साथ काम कर रहे हैं, HTML नहीं। तो आपके पास एक्सएमएल तत्व हो सकते हैं। इनमें HTML तत्व नाम हो सकते हैं, लेकिन वे हैं XML।
  2. InnerXml कम से कम XmlElement ऑब्जेक्ट के लिए एक स्ट्रिंग देता है। आप किसके साथ काम कर रहे हैं?
  3. आप ऑपरेशन से बाहर निकलने की क्या अपेक्षा कर रहे हैं? क्या आप अपनी आवश्यकता के बारे में एक उदाहरण दे सकते हैं?
  4. आपके पास डेटा होने पर आप वास्तव में क्या करना चाहते हैं? हो सकता है कि आपके लक्ष्य के मुकाबले आपके लक्ष्य का बेहतर तरीका क्या है?

संपादित करें

मुझे लगता है कि मुझे तस्वीर मिलती है, लेकिन अगर मैं अभी भी गलत हूं तो मुझे सही करें। आप "

एक टेस्ट

" को xn1 से बाहर करना चाहते हैं, लेकिन "एक परीक्षण" से बाहर निकालना चाहते हैं xn2

तो xn2 के लिए xn1 जाने का तरीका है, और InnerText xn2 के लिए सही होगा।

वैसे तो इस तरह से करें - dataitem के अस्तित्व के लिए परीक्षण करें और तय करें कि जब आप जानते हैं तो क्या करना है।

XmlNode xn = document.SelectSingleNode("/content[@id=1]/data");

if (xn.SelectSingleNode("dataitem") == null)
  Console.WriteLine(xn.InnerXml);
else
  Console.WriteLine(xn.InnerText);

HttpUtility.HtmlDecode से संबंधित अपने प्रश्न का उत्तर देने के लिए, मैंने अभी कार्यान्वयन को देखा और ऐसा लगता है कि यह "सबकुछ के लिए काम करेगा", लेकिन अगर आप जिस स्ट्रिंग को ढूंढ रहे हैं, तो यह मेरे लिए अनिवार्य लगता है InnerXml का।

2
जोड़ा

उन्हें & lt के रूप में क्यों नहीं डालना; और & gt; ? आप इस के साथ एक्सएमएल और कस्टम मार्कअप सामान मिश्रण से बचें ...

2
जोड़ा
यह एक वैध प्रतिक्रिया है, प्रश्न में प्रदान किया गया उदाहरण वैध एक्सएमएल नहीं है
जोड़ा लेखक Mitchel Sellers, स्रोत
मैंने गलत वाक्यविन्यास को ठीक करने के लिए उदाहरण अद्यतन किया है। यह उत्तर वास्तव में प्रश्न का एक प्रासंगिक उत्तर नहीं है, लेकिन मैं स्वीकार करता हूं कि मेरा उदाहरण खराब था।
जोड़ा लेखक Tim Saunders, स्रोत

मुझे लगता है कि टॉमलाक सही रास्ते पर है, लेकिन मैं कोड को थोड़ा अलग लिखूंगा:

        XmlNode xn = document.SelectSingleNode("/content[@id=1]/data");
        if (xn.ChildNodes.Count != 1)
        {
            throw new InvalidOperationException("I don't know what to do if there's not exactly one child node.");
        }
        XmlNode child = xn.ChildNodes[0];
        switch (child.NodeType)
        {
            case XmlNodeType.Element:
                Console.WriteLine(xn.InnerXml);
                break;
            case XmlNodeType.Text:
                Console.WriteLine(xn.Value);
                break;
            default:
                throw new InvalidOperationException("I can only handle elements and text nodes.");
        }

यह कोड आपकी कई अंतर्निहित धारणाओं को स्पष्ट करता है, और जब आप उस डेटा का सामना करते हैं जो आपके द्वारा अपेक्षित रूप में नहीं है, तो यह आपको बताएगा कि यह क्यों विफल हुआ।

1
जोड़ा