2012-01-27 2 views
3

내가 XHTML 파일이 :을 XmlDocument 무시의 xmlns

<html xmlns="http://www.w3.org/1999/xhtml"> 

나는 그것을로드 :

XmlDocument xml = new XmlDocument(); 
StringReader sr = new StringReader(html); 
XmlTextReader xmltr = new XmlTextReader(sr); 
xmltr.Namespaces = false; 
xml.Load(xmltr); 

을 나는 항상 The 'xmlns' attribute is bound to the reserved namespace 'http://www.w3.org/2000/xmlns/'. 예외 가지고 xml.InnerXml를 호출의 내부 XML에 액세스 할 수없는 경우 내 XmlDocument. 로드하는 동안 xmlns 제거하는 방법?

솔루션입니다 :

추측에서
XmlNode xmln = xml.SelectSingleNode("//html"); 
if (xmln != null) 
    ((XmlElement)xmln).RemoveAttribute("xmlns"); 
+0

XHTML 선언은 'http : // www.w3.org/1999/xhtml'에 대해 이야기하지만 설명 된 오류는 'http : // www.w3.org/2000/xmlns'에 대해 이야기합니다. 둘 다 맞습니까? –

+0

예, 제 3 자 XHTML은 1999이고 예외는 2000이라고 말합니다. – Denis

+0

더 중요한 비트는 "xhtml"과 "xmlns"비트입니다 ... –

답변

2

, 당신은 따라서, 최근 XHTML로 변경 구문 분석하는 네임 스페이스를하려는 페이지?

@JonSkeet 당, 당신은 당신의 XmlTextReader는

할 수 있습니다 중 하나

  • 포옹 네임 스페이스에 xmltr.Namespaces = false;을 설정하고 XHTML (xmlns="http://www.w3.org/1999/xhtml") 네임 스페이스를 관리 할 수 ​​XmlNameSpaceManager을 사용할 수 없습니다.
  • 사용하는 네임 스페이스 무관 xpath 같은 네임 스페이스를 무시 local-name(), 같은 : *

xml.SelectSingleNode("/*[local-name()='html']/*[local-name()='body']") 

어느 쪽이든 당신은 해킹하지 않는 한, 당신의 코드는, 네임 스페이스에 적응 변경해야합니다을 로드하기 전에 XML에서 네임 스페이스를 제거하십시오.

* 또한 //를 local-name()과 함께 사용할 수 있지만 요소 수가 많은 문서에는주의해야합니다. 매우 느려질 수 있습니다.

+1

감사합니다. 이미'((XmlElement) xmln) .RemoveAttribute ("xmlns");를 사용하여 네임 스페이스 속성을 없앴습니다. – Denis