使用 C# 读取 XML 元素

本文关键字:元素 XML 读取 使用 | 更新日期: 2023-09-27 18:33:58

如何在下面的示例 xml 文件中获取名字、姓氏和其他名称?我需要使用 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>                  

使用 C# 读取 XML 元素

您可以使用 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();

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

例如

XmlDocument doc = new XmlDocument();
doc.LoadXml(yourXmlstring);
XmlNode firstNameNode = doc.DocumentElement.SelectSingleNode("/PatientRecord/Demographics/Names/cdsd:LegalName/cdsd:FirstName"); 
string firstName = firstNameNode.InnerText;

下面是阅读 XML 文档的分步指南。

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");
}

有关更多信息,请参见编程指南(LINQ to XML)

相关文章: