2012-02-12 11 views
2

以下は私のコードです。タイプElement代わりのText型のノードのノード上にある必要がありますXmlSerializerを使用してxHtmlテキストを抹消する方法は?

xmlSerializer.Deserialize(child.CreateReader()); 

XmlReader:私はこのコードを実行すると

[XmlRootAttribute("book")] 
public class BookHtml 
{ 
    [XmlElement("book-id")] 
    public string BookId { get; set; } 

    [XmlElement("book-xhtml")] 
    public BookHtmlMetadata BookXhtml { get; set; } 

    public String ToHtml() 
    { 
     return this.BookXhtml.Xhtml.ToString(); 
    } 
} 

public class BookHtmlMetadata 
{ 
    [XmlElement("xhtml")] 
    public XElement Xhtml { get; set; } 
} 

public class Program 
{ 
    private static string GetXhtmlWithNoTags() 
    { 
     return "<content>" + 
       "<book>" + 
         "<book-id label=\"Book Id\">2</book-id>" + 
         "<book-xhtml label=\"Book Xhtml\">" + 
          "<xhtml>" + 
            "Copyright © 2010 . All rights reserved.<a href=\"/Home/Book.asp\">Best book ever</a>. " + 
          "</xhtml>" + 
         "</book-xhtml>" + 
        "</book>" + 
       "</content>"; 
    } 

    static void Main(string[] args) 
    { 
     string xml = GetXhtmlWithNoTags(); 

     XElement contentXml = XElement.Parse(xml); 

     var xmlSerializer = new XmlSerializer(typeof(BookHtml)); 
     var list = new List<BookHtml>(); 

     foreach (var child in contentXml.Elements()) 
     { 
      list.Add((BookHtml)xmlSerializer.Deserialize(child.CreateReader())); 
     } 

     string contentToRender = list.Single().BookXhtml.Xhtml; 
    } 

私は上のエラーを取得します。

<xhtml/>タグ内のコンテンツをデシリアライズするには、&lt;a href="/Home/Book.asp"&gt;などのhtmlタグをすべて失うことはできません。私はxhtmlを使用してブラウザのHTMLタグ/リンクをレンダリングできるはずです。

すべてのアイデアは、大歓迎です。

答えて

1

xhtmlタグの内部がフリーフォームなので、タイプをXElementからstringに変更する必要があります。次に、html/xhtmlブロックを処理しないようにするには、CDATAを使用して非直列化ルーチンにこれがかなり有効なxmlではないことを伝え、使用する型付き構造体を持たないようにします。コードで

:XHTMLのブロックが有効な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>"; 
} 

、あなたはXMLをロードし、ツリーをトラバースするのXMLDocumentを使用することができます。

関連する問題