문제

나는 이것과 유사한 구조가 포함 된 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이 필요한 이유는 무엇입니까? 에서와 같이, 왜 이름 지정을 정의해야합니까? 그리고 네임 스페이스? 아는 사람이 짧은 의견을 삭제할 수 있다면 감사드립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top