2017-12-22 23 views
2

を取得するためにC#で:解析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; 
} 
関連する問題