CDATA в XML с использованием C # - PullRequest
0 голосов
/ 06 июня 2009

Это необычная ситуация. Мы вынуждены взаимодействовать с третьей стороной, которая требует переноса определенных значений в ответе xml, даже если это просто строковое значение.

Example: <Property name="someName" type="String"><![CDATA[someValue]]></Property>

Мы добавляем эти узлы свойств в документ следующим образом:

XPathExpression query = xPathNavigator.Compile(xpath);

XPathNavigator node = xPathNavigator.SelectSingleNode(query.Expression, xmlNamespaceManager);

string property = "<Property name='someName' type='String'><![CDATA[someValue]]></Property>";

node.AppendChild(property);

Проблема в том, что полученный XML выглядит следующим образом

<Property name="someName" type="String">someValue</Property>

CDATA продолжает извлекаться.

Ответы [ 2 ]

3 голосов
/ 06 июня 2009

Этого можно добиться, используя XmlWriter для записи данных:

private static void WriteProperty(XmlWriter writer, string name, string type, string value)
{
    writer.WriteStartElement("Property");
    writer.WriteAttributeString("name", name);
    writer.WriteAttributeString("type", type);
    writer.WriteCData(value);
    writer.WriteEndElement();

}

// call the method from your code
XPathExpression query = xPathNavigator.Compile(xpath);    
XPathNavigator node = xPathNavigator.SelectSingleNode(query.Expression, xmlNamespaceManager);
using (XmlWriter writer = node.AppendChild())
{
    WriteProperty(writer, "someName", "String", "someValue");
}
0 голосов
/ 06 июня 2009

Возможно, вы захотите проверить, будет ли работать node.AppendChild (). WriteRaw (свойство), учитывая, что вы все равно форматируете строку XML вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...