Как сохранить HTML в XML-файле, используя Linq to XML? - PullRequest
7 голосов
/ 09 июня 2009

Я пытаюсь использовать Linq to XML для сохранения и извлечения HTML-кода между файлом XML и приложением Windows Forms. Когда он сохраняет его в файл XML, теги HTML кодируются в формате XML и не сохраняются в виде обычного HTML.

Пример HTML:

<P><FONT color=#004080><U>Sample HTML</U></FONT></P>

Сохранено в XML-файле:

&lt;P&gt;&lt;FONT color=#004080&gt;&lt;U&gt;Sample HTML&lt;/U&gt;&lt;/FONT&gt;&lt;/P&gt;

Когда я вручную редактирую XML-файл и вставляю нужный HTML-код, Linq извлекает HTML-код и отображает его правильно.

Вот код, который сохраняет HTML в файл XML:

XElement currentReport = (from item in callReports.Descendants("callReport")
                                  where (int)item.Element("localId") == myCallreports.LocalId
                                  select item).FirstOrDefault();

        currentReport.Element("studio").Value = myCallreports.Studio;
        currentReport.Element("visitDate").Value = myCallreports.Visitdate.ToShortDateString();
       // *** The next two XElements store the HTML
        currentReport.Element("recomendations").Value = myCallreports.Comments;
        currentReport.Element("reactions").Value = myCallreports.Ownerreaction;

Я предполагаю, что это происходит из-за кодировки XML, но я не уверен, как с этим бороться. Этот вопрос дал мне некоторые подсказки ... но ответа не было (по крайней мере, для меня).

Спасибо за помощь,

Оран

Ответы [ 2 ]

5 голосов
/ 09 июня 2009

Установка свойства Value будет автоматически кодировать строку html. Это должно сработать, но вам нужно убедиться, что ваш HTML является допустимым XML (XHTML).

currentReport.Element("recomendations").ReplaceNodes(XElement.Parse(myCallreports.Comments));

Редактировать: Возможно, вам понадобится обернуть введенный пользователем HTML в теги <div> </div>. XElement.Parse ожидает найти строку с хотя бы начальным и конечным тегом xml. Таким образом, это может работать лучше:

currentReport.Element("recomendations").ReplaceNodes(XElement.Parse("<div>" + myCallreports.Comments + "</div>"));

Тогда вам просто нужно убедиться, что теги типа <br> отправляются как <br />.

Редактировать 2: Другой вариант будет использовать XML CDATA . Оберните HTML с <![CDATA[ и ]]>, но я никогда не использовал это, и я не уверен, как это влияет на чтение XML.

currentReport.Element("recomendations").ReplaceNodes(XElement.Parse("<![CDATA[" + myCallreports.Comments + "]]>"));
0 голосов
/ 09 июня 2009

Попробуйте использовать currentReport.Element("studio").InnerXml вместо currentReport.Element("studio").Value

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