SelectSingLenode가 NULL을 반환하는 이유는 무엇입니까?
-
03-07-2019 - |
문제
나는 이것과 유사한 구조가 포함 된 XML 문서로 작업하고 있습니다.
<MT>
<Events>
<event id="1">
<field name="blah" value="a_value" type="atype" />
.
.
.
</event>
</Events>
</MT>
현재 파일에서 XML 문서로로드하고 있습니다.
XmlDocument xdoc = new XmlDocument();
xdoc.Load("somefile.xml"); //Successfully loads btw
그러나 나는 다음 코드 라인을 실행하려고 할 때 문제가 발생 하고이 특정 문서만으로도 문제가 발생합니다.
xdoc.SelectSingleNode("//event[@id='1']"); //This returns a null
'ID'라는 속성을 사용하는 문제로 인해 이것이 NULL을 반환한다고 추측하여 올바른 길을 가고 있습니까?
해결책
XML 파일을 사용하여 이것을 복제 할 수 없습니다
<MT>
<Events>
<event id="1">
<field name="blah" value="a_value" type="atype" />
</event>
</Events>
</MT>
그리고 코드
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\test.xml");
XmlNode node = doc.SelectSingleNode("//event[@id='1']");
이것은 예상대로 널이 아닌 노드를 반환합니다.
업데이트
추가 후 xmlns="example.org"
~로 <MT>
요소, XPath의 네임 스페이스 관리자를 구성하고 이벤트에 네임 스페이스를 사용해야했습니다. 어떤 이유로 기본 네임 스페이스가 작동 할 수 없었습니다.
XmlDocument doc = new XmlDocument();
doc.Load(@"D:\test.xml");
XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable);
manager.AddNamespace("e", "http://example.org");
XmlNode node = doc.SelectSingleNode("//e:event[@id='1']", manager);
이것을 작동 시키려고 할 때 나를 혼란스럽게했습니다. 어떤 네임 스페이스를 찾을 수없는 경우 xmlnamespacemanager가 문서에서 xmlnametable이 필요한 이유는 무엇입니까? 에서와 같이, 왜 이름 지정을 정의해야합니까? 그리고 네임 스페이스? 아는 사람이 짧은 의견을 삭제할 수 있다면 감사드립니다.
제휴하지 않습니다 StackOverflow