2008-08-19 15 views
1

Ich habe eine einfache CAML Abfrage wieEscaping XML-Tag Inhalt

<Where><Eq><Field="FieldName"><Value Type="Text">Value text</Value></Field></Eq></Where> 

Und ich habe eine Variable für Value text zu ersetzen. Was ist der beste Weg, um den Text, der hier im .NET-Framework ersetzt wird, zu validieren/zu entkommen? Ich habe eine schnelle Websuche zu diesem Problem gemacht, aber alles, was ich fand, war System.Xml.Convert Klasse, aber das scheint nicht ganz das zu sein, was ich hier brauche.

Ich weiß, ich hätte mit einem XmlWriter hier gehen können, aber es scheint wie viel Code für solch eine einfache Aufgabe, wo ich nur sicherstellen müssen, dass der Value text Teil gut formatiert ist.

Antwort

0

Verwenden Sie System.Xml.Linq.XElement und SetValue Methode. Dies formatiert den Text (unter der Annahme einer Zeichenkette), aber Sie können auch XML als Wert festlegen.

+0

Ich bin mit .NET 2.0 – axk

0

Ich bin nicht sicher, welche Kontext der xml herkommt, aber wenn es in einem String const-Variable gespeichert ist, die Sie erstellt haben, dann ist der einfachste Weg, es wäre zu ändern:

public class Example 
{ 
    private const string CAMLQUERY = "<Where><Eq><Field=\"FieldName\"><Value Type=\"Text\">{0}</Value></Field></Eq></Where>"; 

    public string PrepareCamlQuery(string textValue) 
    { 
     return String.Format(CAMLQUERY, textValue); 
    } 
} 

Natürlich Dies ist der einfachste Ansatz basierend auf der Frage. Sie könnten das XML auch in einer XML-Datei speichern und es einlesen und so manipulieren, wie es Darren Kopp beantwortet hat. Das erfordert auch C# 3.0 und ich bin mir nicht sicher, auf welches .Net Framework Sie abzielen. Wenn Sie nicht auf .Net 3.5 abzielen und das Xml manipulieren möchten, empfehle ich, nur Xpath mit C# zu verwenden. Diese reference geht ausführlich auf die Verwendung von Xpath mit C# zu manipulieren Xml, als ich alles eingeben.

0

Sie können den System.XML-Namespace dazu verwenden. Natürlich können Sie auch LINQ verwenden. Aber ich wähle den .NET 2.0-Ansatz, weil ich nicht sicher bin, welche .NET-Version Sie verwenden.

+0

funktionieren scheint wie eine Menge Code für eine solche grundlegende Aufgabe. – axk

1

Wenn Sie mit XML arbeiten, verwenden Sie immer die XML-API, die mit Ihrer Programmierumgebung zusammenarbeitet. Versuchen Sie nicht, Ihren eigenen Code zum Erstellen und Entschlüsseln von XML-Dokumenten zu erstellen. Wie in Longhorn213 erwähnt, befinden sich in .Net alle geeigneten Komponenten im System.XML-Namespace. Wenn Sie versuchen, Ihren eigenen Code zum Schreiben von XML-Dokumenten zu schreiben, werden viele Bugs und Probleme die Folge sein.

1

Das Problem mit dem System.Xml Ansatz in meinem Fall war, dass es zu viel Code benötigt, um dieses einfache XML-Fragment zu erstellen. Ich denke, ich habe einen Kompromiss gefunden.

XmlDocument doc = new XmlDocument(); 
doc.InnerXml = @"<Where><Eq><Field Name=""FieldName""><Value Type=""Text"">/Value></Field></Eq></Where>"; 
XmlNode valueNode = doc.SelectSingleNode("Where/Eq/Field/Value"); 
valueNode.InnerText = @"Text <>!$% value>"; 
1

verwenden:

System.Security.SecurityElement.Escape("<unescaped text>");