Сведения о вопросе

Математик

22:51, 25th August, 2020

Теги

.net   xml   frameworks   escaping   encode    

Экранирование содержимого тега XML

Просмотров: 538   Ответов: 6

У меня есть простой запрос CAML, как

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

И у меня есть переменная, чтобы заменить Value text . Как лучше всего проверить / экранировать текст, который подставляется здесь в фреймворке .NET? Я сделал быстрый поиск в интернете по этой проблеме, но все, что я нашел, было System.Xml.Convert класс, но это, кажется, не совсем то, что мне нужно здесь.

Я знаю, что мог бы пойти с XmlWriter здесь, но кажется, что много кода для такой простой задачи, где мне просто нужно убедиться, что часть Value text хорошо отформатирована.



  Сведения об ответе

darknet

19:08, 6th August, 2020

Использовать это:

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


  Сведения об ответе

ITSME

14:46, 27th August, 2020

При работе с XML всегда используйте XML API, который работает с вашей средой программирования. Не пытайтесь свернуть свой собственный XML документ построения и экранирования кода. Как уже упоминалось Longhorn213, в .Net все соответствующие вещи находятся в пространстве имен System.XML. Попытка написать свой собственный код для написания документов XML просто приведет к множеству ошибок и проблем в будущем.


  Сведения об ответе

FAriza

19:03, 27th August, 2020

Проблема с подходом System.Xml в моем случае заключалась в том, что для построения этого простого фрагмента XML требовалось слишком много кода. Я думаю, что нашел компромисс.

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>";


  Сведения об ответе

SKY

16:16, 3rd August, 2020

Для этого можно использовать пространство имен System.XML. Конечно, вы также можете использовать LINQ. Но я выбрал подход .NET 2.0, потому что не уверен, какую версию .NET вы используете.

XmlDocument doc = new XmlDocument();

// Create the Where Node
XmlNode whereNode = doc.CreateNode(XmlNodeType.Element, "Where", string.Empty);
XmlNode eqNode = doc.CreateNode(XmlNodeType.Element, "Eq", string.Empty);
XmlNode fieldNode = doc.CreateNode(XmlNodeType.Element, "Field", string.Empty);

XmlAttribute newAttribute = doc.CreateAttribute("FieldName");
newAttribute.InnerText = "Name";
fieldNode.Attributes.Append(newAttribute);

XmlNode valueNode = doc.CreateNode(XmlNodeType.Element, "Value", string.Empty);

XmlAttribute valueAtt = doc.CreateAttribute("Type");
valueAtt.InnerText = "Text";
valueNode.Attributes.Append(valueAtt);

// Can set the text of the Node to anything.
valueNode.InnerText = "Value Text";

// Or you can use
//valueNode.InnerXml = "<aValid>SomeStuff</aValid>";

// Create the document
fieldNode.AppendChild(valueNode);
eqNode.AppendChild(fieldNode);
whereNode.AppendChild(eqNode);

doc.AppendChild(whereNode);

// Or you can use XQuery to Find the node and then change it

// Find the Where Node
XmlNode foundWhereNode = doc.SelectSingleNode("Where/Eq/Field/Value");

if (foundWhereNode != null)
{
    // Now you can set the Value
    foundWhereNode.InnerText = "Some Value Text";
}


  Сведения об ответе

lourence

21:06, 1st October, 2020

используйте методы System.Xml.Linq.XElement и SetValue . Это позволит отформатировать текст (предполагая строку), но также позволяет установить xml в качестве значения.


  Сведения об ответе

lats

05:47, 18th August, 2020

Я не уверен, из какого контекста исходит xml, но если он хранится в созданной вами строковой переменной const, то самый простой способ изменить его будет:

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);
    }
}

Конечно, это самый простой подход, основанный на вопросе. Вы также можете хранить xml в файле xml, читать его и манипулировать им таким образом, как ответил Даррен Копп . Для этого также требуется C# 3.0, и я не уверен, на какой фреймворк .Net вы ориентируетесь. Если вы не нацелены на .Net 3.5 и хотите манипулировать Xml,я рекомендую просто использовать Xpath с C#. эта ссылка подробно описывает использование xpath с C# для манипуляции xml, чем я печатаю все это.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться