我需要解析并读取以下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(&#34; / Patients / Person&#34;)为空,任何想法如何阅读来自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 :(得分:2)
您需要解决几件事。
首先,XML中的Person
类型限定为命名空间,因此在搜索该节点时需要包含该命名空间(通过XmlNamespaceManager
)。
要执行此操作,请通过AddNamespace
方法添加命名空间,并为其指定别名和要在搜索中使用的命名空间。在我的示例中,我使用了别名ehr
。
然后,将命名空间管理器提供到.SelectNodes()
并在搜索字符串中将“Person”作为前缀加上别名(例如:/Patients/ehr:Person
)
其次,FirstName
和LastName
项是属性,您必须通过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;
}