2011-07-27 3 views
2

System.Linq.Xml의 클래스를 사용하여 XML 객체를 작성합니다. 하지만이 작업하고있는 API는 나에게 태그에 바로 HTML 코드를 넣어 필요합니다XElement에 HTML 추가

<message><html><body>...</body></html></message> 

I이 사용하여 XElement을 수행하는 방법을 알아낼 기운 다. 단지 모든 HTML 문자 <![CDATA[에 HTML을 래핑

new XElement("message", new XCData(myHtmlStringVariable)); 

... ]]> API를 나던 같은 탈출

new XElement("message", myHtmlStringVariable); 

.

XElement의 콘텐츠에 직접 HTML을 삽입하는 방법이 있습니까?

답변

9

당신은이 작업을 수행 할 수 있습니다 이것은 HTML은 잘 구성된 XML이고 단 하나의 루트 요소를 가지고해야 않습니다

string html = "<html><body></body></html>"; 
XElement message = new XElement("message", XElement.Parse(html)); 

. 여러 루트 요소가 포함 된 HTML 코드가있는 경우

, 당신은 항상이 같은 요소를 만들 수 있습니다

string html = "<p>foo</p><p>bar</p>"; 
XElement message = XElement.Parse("<message>" + html + "</message>"); 

잘 구성된 XML에 대한 요구가 여전히 존재합니다. 즉, 이 아닌 <br />과 같은 빈 요소가 있어야 함을 의미합니다. XML에 직접 HTML을 포함하려는 경우에는 그럴 수 없습니다.

string html = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><body></body></html>"; 
XElement message = new XElement("message", XElement.Parse(html)); 

이이 같은 XML을 생성합니다 :

<message> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <body></body> 
    </html> 
</message> 
+0

굉장이 가능하고 API가 그것을 받아들이는 경우

또한, 나는 HTML 요소를 적절한 XHTML 네임 스페이스를주는 것이 좋습니다 , 나는 그것을 시험 할 것이다. HTML이 잘 형성되지 않았다면 어떻게 될까? – dkarzon

+0

HTML을 유효한 XML로 사용하지 않으면 충돌이 발생합니다 ... 내가 추측하는 바는 뭔가 있습니다. – dkarzon

+0

@ d1k_is : 잘 형성되지 않았다면'XmlException'을 던져서 잡을 수 있습니다. 불행히도 내가 아는 한'TryParse' 메서드는 없습니다. – Sven

3
new XElement("message", new XRaw(myHtmlStringVariable)); 

public class XRaw : XText 
{ 
    public XRaw(string text):base(text){} 
    public XRaw(XText text): base(text){} 

    public override void WriteTo(System.Xml.XmlWriter writer) 
    { 
    writer.WriteRaw(this.Value); 
    } 
} 
+2

이 코드가 실패한다는 것을주의하십시오. var xraw = new XRaw ("
"); 새 XElement ("message", xraw, xraw); XRaw 개체를 두 번 이상 사용하지는 않습니다 (WriteTo는 한 번 호출됩니다). – oddbear