2014-12-31 1 views
1

IDE :XmlDocument에서 네임 스페이스가있는 노드를 선택하는 방법은 무엇입니까?

True|Success 

아래 사용 : VS 2010, 윈폼,

이 난 이후의 구문 분석의 InnerText을 얻기 위해 <string> 노드를 선택하려고

string xmlstr = "<string xmlns="http://example.com/proj1">True|Success</string>";  

xml 형식의 문자열을 가지고 코드 :

XmlDocument xdoc = new XmlDocument(); 
xdoc.LoadXml(xmlstr);   
string message = xdoc.SelectSingleNode("string").InnerText; //Here getting null Execption error. 

xml에서이 메시지를 선택하는 방법을 알려주시겠습니까?

+0

당신의 XPath는'// string'이어야합니다. –

+0

이 질문은 많은 이용 가능한 복제물 중에서 선택하는 것이 어려워 지느냐는 질문을 자주 받았습니다. – Tomalak

+0

@Tomalak 나는 그것이 중복이라고 말하지 않을 것이다. – t3chb0t

답변

2

당신은 노드를 선택할 수하는 XmlNamespaceManager을 추가해야합니다 : 그것은 탈출하지 않는 내부 따옴표가 포함되어 있기 때문에 당신의 XML 문자열 게다가

XmlNode.SelectSingleNode Method (String, XmlNamespaceManager)

string xmlstr = "<string xmlns=\"http://example.com/proj1\">True|Success</string>";  
XmlDocument xdoc = new XmlDocument(); 
xdoc.LoadXml(xmlstr); 

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable); 
nsmgr.AddNamespace("ab", "http://example.com/proj1"); 

XmlNode stringNode = xdoc.SelectSingleNode("//ab:string", nsmgr); 
string message = stringNode.InnerText; 

이 예에서는 유효하지 않습니다.

+0

@Tomalak 예를 수정했습니다. 어쨌든 노드가 네임 스페이스를 포함하고'XmlNamespaceManager'가 필요했기 때문에 제안 된'XPath '를 사용하면 작동하지 않을 것입니다. – t3chb0t

+0

... 이제는 내가 링크 한 복제본과 정확히 일치합니다. ;) – Tomalak

+1

@Tomalak 오, 미안하지만, 나는 그것을 복사하려고하지 않았다. 나는 actaully 네임 스페이스가 다른 질문에 사용되었다는 것을 몰랐다 -] 그리고 나 혼자서 그것을 해결했다 ... 지금 나는 나에게 자랑 스럽다.] 나는 중복 된 hehe에서이 정보를 놓쳤다는 것을 부끄러워 할 것이다. . – t3chb0t