Кодировать двойные кавычки внутри элемента XML, используя LINQ to XML - PullRequest
4 голосов
/ 19 февраля 2010

Я анализирую строку XML в XDocument, который выглядит следующим образом (с использованием XDocument.Parse)

<Root>
  <Item>Here is &quot;Some text&quot;</Item>
</Root>

Затем я немного манипулирую XML и хочу отправить его обратно какстрока, как будто она пришла в

<Root>
  <Item>Here is &quot;Some text&quot;</Item>
  <NewItem>Another item</NewItem>
</Root>

Тем не менее, я получаю

<Root>
  <Item>Here is \"Some text\"</Item>
  <NewItem>Another item</NewItem>
</Root>

Обратите внимание, что двойные кавычки теперь экранируются вместо кодирования?

Это происходит независимо от того, использую ли я

ToString(SaveOptions.DisableFormatting);

или

var stringWriter = new System.IO.StringWriter();
xDoc.Save(stringWriter, SaveOptions.DisableFormatting);
var newXml = stringWriter.GetStringBuilder().ToString();

Как получить двойные кавычки в виде &quot; а не \"?

ОБНОВЛЕНИЕ : Может быть, это может объяснить это лучше:

var origXml = "<Root><Item>Here is \"Some text&quot;</Item></Root>";
Console.WriteLine(origXml);
var xmlDoc = System.Xml.Linq.XDocument.Parse(origXml);
var modifiedXml = xmlDoc.ToString(System.Xml.Linq.SaveOptions.DisableFormatting);
Console.WriteLine(modifiedXml);

вывод, который я получаю из этого:

<Root><Item>Here is "Some text&quot;</Item></Root>
<Root><Item>Here is "Some text"</Item></Root>

Я хочу, чтобы вывод был:

<Root><Item>Here is "Some text&quot;</Item></Root>
<Root><Item>Here is "Some text&quot;</Item></Root>

Ответы [ 2 ]

2 голосов
/ 05 апреля 2010

Вы должны использовать XmlWriter, чтобы обеспечить правильное кодирование символов. Однако я не уверен, что вы можете получить именно тот результат, который вам нужен, без использования собственного класса для вывода текста.

0 голосов
/ 27 марта 2010

Не проверено и не знаю, подходит ли вам это решение, но попробуйте заменить это

var origXml = "<Root><Item>Here is \"Some text&quot;</Item></Root>";

с этим

var origXml = "<Root><Item>Here is \"Some text&amp;quot;</Item></Root>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...