Linq-to-XML не получает содержимое узла, содержащего HTML-теги - PullRequest
2 голосов
/ 15 апреля 2010

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

XML напоминает:

<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<image><img src="/Images/m1cznk4a6fh7.jpg"  /></image>
<contentType>Banner</contentType>
</root>

Код:

XDocument document = XDocument.Parse(content.XML);
XElement imageElement = document.Descendants("image").SingleOrDefault();
image = imageElement.Value; // Doesn't get the content, while if I specify .Descendants("contentType") it works

Есть идеи?

Ответы [ 3 ]

1 голос
/ 15 апреля 2010

.Value означает любой текст в теге и любые дочерние теги, но у вас его нет. Когда вы анализировали его, <img/> рассматривался как тег XML, не специфичный для HTML (Linq не знает разницы). Например, если ваш XML был написан как:

<image>
    <img>/Images/m1cznk4a6fh7.jpg
    </img>
</image>

Тогда ваш код будет работать.

Вам придется пойти дальше в своих потомках к тегу <img/> и затем получить .Value атрибута src, чтобы получить нужный вам текст.

1 голос
/ 15 апреля 2010

Если вы собираетесь хранить HTML внутри элементов XML, он должен быть внутри комментария <![CDATA[]]>, чтобы LINQ2XML знал, что его не следует рассматривать как дополнительную разметку XML.

<image><![CDATA[<img src="Images/abc.jpg />]]></image>

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

0 голосов
/ 15 апреля 2010

Это потому, что нет Value вложенного в Image только другого элемента (img). Вам нужно сделать что-то вроде:

XElement imgElement = document.Descendants("image").SingleOrDefault().FirstNode;

Затем получите доступ к свойству Value, чтобы получить src. В противном случае, если вы ищете тег img в виде простого текста, вам необходимо сохранить его в своем XML-документе в качестве раздела CDATA, например, g..g

<image><![CDATA[<img src="/Images/m1cznk4a6fh7.jpg" />]]></image>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...