使用C#读取XML元素

时间:2014-12-11 03:21:42

标签: c# xml c#-4.0

如何在以下示例xml文件中获取FirstName,LastName和OtherName?我需要使用C#从后面的代码中将它们分配给变量。

  <PatientRecord>
      <Demographics>
              <Names>
                     <cdsd:LegalName namePurpose="L">
                               <cdsd:FirstName>
                                     <cdsd:Part>SARAH</cdsd:Part>
                                     <cdsd:PartType>GIV</cdsd:PartType>
                               </cdsd:FirstName>
                               <cdsd:LastName>
                                      <cdsd:Part>GOMEZ</cdsd:Part>
                                      <cdsd:PartType>FAMC</cdsd:PartType>
                               </cdsd:LastName>
                               <cdsd:OtherName>
                                       <cdsd:Part>GABRIELA</cdsd:Part>
                                       <cdsd:PartType>GIV</cdsd:PartType>
                               <cdsd:PartQualifier>BR</PartQualifier>                  

3 个答案:

答案 0 :(得分:0)

将XML文档加载到XmlDocument类型对象中,并使用XPath查询FirstName,LastName等。

E.g。

XmlDocument doc = new XmlDocument();
doc.LoadXml(yourXmlstring);

XmlNode firstNameNode = doc.DocumentElement.SelectSingleNode("/PatientRecord/Demographics/Names/cdsd:LegalName/cdsd:FirstName"); 

string firstName = firstNameNode.InnerText;

Here's阅读XML文档的分步指南。

答案 1 :(得分:0)

XDocument xml = XDocument.Load(stream);
var legalNames = xml.Root
                    .Elements("Demographics")
                    .Elements("Names")
                    .Elements("LegalName");
foreach(XElement ln in legalNames)
{
    string firstName = (string)ln.Element("FirstName");
    // or you can get (string)ln.Element("FirstName").Element("Part");
    string lastName = (string)ln.Element("LastName");
    string otherName = (string)ln.Element("OtherName");
}

有关详细信息,请参阅Programming Guide (LINQ to XML)

答案 2 :(得分:0)

您可以使用ReadXML .net功能,例如:

DataSet objDataSet = new DataSet();

objDataSet.ReadXML("@PathofXMLfile", XmlReadMode.InferSchema);

List<object> Names = objDataSet.Tables["FirstName"].AsEnumerable().Select(r => r["Part"]).ToList();

这应该将同一标记结构中的所有数据行(即:<cdsd:Part>SARAH</cdsd:Part>)应用到对象列表中,然后您可以使用循环来获取每个值或指定Names [x]以检索值一个特定的指数。注意:我不确定ReadXML函数是否会删除标记前缀(cdsd :),或者您是否需要在lambda表达式中包含它,即:List<object> Names = objDataSet.Tables["cdsd:FirstName"].AsEnumerable().Select(r => r["cdsd:Part"]).ToList();