2017-12-22 2 views
2
내가 분석하고 다음과 같은 XML 형식에서 값을 읽을 필요가

검색 할 수 있습니다 :구문 분석 XML 값

<?xml version="1.0"?> 
<Patients xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Person xmlns="http://ehr.org/VM/" NationalCode="1234" LastName="Morgan" FirstName="Alen"> 
    </Person> 
</Patients> 

그리고 난 다음 코드를 사용하여 환자와 생일 세부 사항의 이름을 읽을려고을하지만, 몇 가지 이유 xml.SelectNodes ("/ Patients/Person")가 null이면 XML에서 값을 어떻게 읽을 수 있습니까?

XmlDocument xml = new XmlDocument(); 
xml.LoadXml(myXmlString); 

XmlNodeList xnList = xml.SelectNodes("/Patients/Person"); 
foreach (XmlNode xn in xnList) 
{ 
    string firstName = xn["FirstName"].InnerText; 
    string lastName = xn["LastName"].InnerText; 
} 
+0

는 Person 요소에 아마 네임 스페이스 :

여기 작업 코드입니다. – Amy

+0

[C#에서 기본 네임 스페이스로 Xpath 사용하기] (https://stackoverflow.com/q/585812/3744182)를보십시오. 사실 나는 이것이 중복 된 것이라고 생각합니다. – dbc

답변

2

수정해야 할 몇 가지 사항이 있습니다.

먼저 XML의 Person 유형이 네임 스페이스로 범위가 지정되므로 해당 노드를 검색 할 때 해당 네임 스페이스를 포함해야합니다 (XmlNamespaceManager 통해).

이렇게하려면 AddNamespace 메서드를 통해 네임 스페이스를 추가하고 별칭과 검색에 사용할 네임 스페이스를 지정합니다. 내 예에서는 별칭 ehr을 사용했습니다.

그런 .SelectNodes()으로 네임 스페이스 관리자를 제공하고 별명 (예 : /Patients/ehr:Person)로 검색 문자열에서 "사람"을 앞에

둘째, FirstNameLastName 항목은이를 통해 액세스해야하는 속성입니다 Attributes 속성 xn["FirstName"]을 사용하면 해당 이름을 가진 하위 노드가 검색됩니다.

XmlDocument xml = new XmlDocument(); 
xml.LoadXml(myXmlString); 

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable); 
nsmgr.AddNamespace("ehr", "http://ehr.org/VM/"); 

XmlNodeList xnList = xml.SelectNodes("/Patients/ehr:Person", nsmgr); 
foreach (XmlNode xn in xnList) 
{ 

    string firstName = xn.Attributes["FirstName"].Value; 
    string lastName = xn.Attributes["LastName"].Value; 
}