Поскольку внутренняя часть тегов xhtml может быть свободной формой, вам следует изменить тип с XElement на string. Затем, чтобы избежать обработки блока html / xhtml, вы можете использовать CDATA, чтобы сообщить подпрограмме десериализации, что это не совсем правильный xml, и у вас нет типизированной структуры для использования.
В коде:
public class BookHtmlMetadata
{
[XmlElement("xhtml")]
public string Xhtml { get; set; }
}
и
private static string GetXhtmlWithNoTags()
{
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?><content>" +
"<book>" +
"<book-id label=\"Book Id\">2</book-id>" +
"<book-xhtml label=\"Book Xhtml\">" +
"<xhtml><![CDATA[" +
"Copyright © 2010 . All rights reserved.<a href=\"/Home/Book.asp\">Best book ever</a>. " +
"!]]></xhtml>" +
"</book-xhtml>" +
"</book>" +
"</content>";
}
Теперь, если блок xhtml является действительным xml, вы можете использовать XMLDocument для загрузки xml и обхода дерева.