2012-02-12 1 views
2

아래 코드는 제 코드입니다. 유형 Element 대신 텍스트 형식의 노드의 노드에 있어야합니다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 태그/링크를 렌더링 할 수 있어야합니다.

모든 아이디어, suggessions 크게 감사하겠습니다.

답변

1

xhtml 태그의 내부가 자유 형식 일 수 있으므로 XElement에서 string으로 유형을 변경해야합니다. 그런 다음 html/xhtml 블록을 처리하지 않으려면 CDATA를 사용하여 deserialization 루틴에 꽤 유효한 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로 사용할 수 있습니다.