2010-02-04 5 views
10

Also, ich habe einige Daten in Form von:Integrierte .NET-Funktion zum Entfernen von Zeichen im XML-Stream?

<foo><bar>test</bar></foo> 

Welche .NET-Klassen/Funktionen würde ich verwenden möchte, das ist ziemlich etwas zu konvertieren und sie in einer Datei so etwas suchen ausschreiben:

<foo> 
    <bar> 
     test 
    </bar> 
</foo> 

Seien spezifische zu den Funktionen und Klassen bitte, nicht nur „System.XML verwenden“. Es scheint eine Menge verschiedener Möglichkeiten, um Dinge in .NET zu tun, unter Verwendung von XML :(

Dank

Antwort

14

Mit der System.Xml.XmlDocument Klasse ...

Dim Val As String = "&lt;foo&gt;&lt;bar&gt;test&lt;/bar&gt;&lt;/foo&gt;" 
Dim Xml As String = HttpUtility.HtmlDecode(Val) 

Dim Doc As New XmlDocument() 
Doc.LoadXml(Xml) 

Dim Writer As New StringWriter() 
Doc.Save(Writer) 

Console.Write(Writer.ToString()) 
+1

-1 für VB, +2 für genau das, was ich wollte. Danke :) – Polaris878

+0

Gibt es auch eine Alternative zum Aufruf von HttpUtility.HtmlDecode (str) ?? Ich mag es nicht, System.Web nur für diese Funktion einzubinden ... – Polaris878

+0

XmlDocument tut eigentlich gar nichts, wie geschrieben. HtmlDecode erledigt die ganze Arbeit. Wenn Sie den HtmlDecode-Aufruf überspringen und XmlDocument verwenden, um XmlElements/XmlAttribute-Werte zu extrahieren (über .ChildNodes, .SelectNode [s] usw.), werden die Werte dieser Objekte korrekt entkoppelt. – technophile

8

Sie diesen Code verwenden können.

string p = "&lt;foo&gt;&lt;bar&gt;test&lt;/bar&gt;&lt;/foo&gt;"; 
Console.WriteLine(System.Web.HttpUtility.HtmlDecode(p)); 
-3

Hier ist eine, die ich verwenden, übergeben in einer XML-Zeichenfolge, setzen ToXml auf true, wenn Sie eine Zeichenfolge, die "< foo konvertieren möchten/> < Bar/> "auf die native XML-Äquivalent "#lt; foo/# gt; #lt; bar # gt;" - den Hash mit dem Ampersand ersetzen wie dieser Editor es zu entkommen hält ... ebenfalls "; foo/# gt; #lt; bar # gt; #lt" (ersetzen den Hash mit dem Ampersand) auf "<foo/bar> <, wenn ToXml falsch ist, wird es eine Zeichenfolge enthält, die konvertiert/> "

 
string XmlConvert(string sXml, bool ToXml){ 
    string sConvertd = string.Empty; 
    if (ToXml){ 
     sConvertd = sXml.Replace("<", "#lt;").Replace(">", "#gt;").Replace("&", "#amp;"); 
    }else{ 
     sConvertd = sXml.Replace("#lt;", "<").Replace("#gt;", ">").Replace("#amp;", "&"); 
    } 
    return sConvertd; 
} 

(re Stellen Sie den Hash mit dem Ampersand wie dieser Editor hält es innerhalb der pre-Tags) entweichende

Edit: Dank technophile für den Hinweis, das Offensichtliche aus, aber die nur der zur Abdeckung ist so konzipiert, XML-Tags Das ist der Kern der Funktion, die einfach erweitert werden kann, um andere XML-Tags abzudecken, und Sie können mehr hinzufügen, die ich vielleicht verpasst habe! Prost! :)

+0

-1: Behandelt alle maskierten Werte (Unicode-Werte, andere XML-Entitätswerte usw.) nicht korrekt. – technophile

+1

Es behandelt auch keine Anführungszeichen, die für die Handhabung von Attributen wichtig sind. Das Verwenden einer bestimmten Liste, um zu versuchen, Replaces zu tun, ist von Natur aus schlimmer als die Verwendung einer API, die der XML-Spezifikation entspricht und alles korrekt behandelt, ohne Bandaids zu benötigen, wenn Sie das nächste Mal mit " oder was auch immer umgehen möchten. – technophile

Verwandte Themen