使用重复的节点模式解析XML

本文关键字:模式 XML 节点 | 更新日期: 2023-09-27 17:50:00

你能给我一些关于在c#中解析XML文档的最佳方法的想法吗?

<RESPONSE>
  <FNAME>user1</FNAME>
  <LNAME>lastname1</LNAME>
  <ADDRESS>
     <LINE1>line 1 for user 1</LINE1>
     <LINE2>line 2 for user 1</LINE2>
     .....
     .....
  </ADDRESS>
  <FNAME>user2</FNAME>
  <LNAME>lastname2</LNAME>
  <ADDRESS>
     <LINE1>line 1 for user 2</LINE1>
     <LINE2>line 2 for user 2</LINE2>
     .....
     .....
  </ADDRESS>
</RESPONSE>

这是从在线XML服务返回的数据,显然它的格式不是很好,因为嵌套没有正确地应用于每个不同的元素。是否有一种方法可以避免逐行解析和文本比较?

使用重复的节点模式解析XML

给你:

XmlTextReader xml = new XmlTextReader("response.xml");
while (xml.Read())
{
    switch (xml.NodeType)
    {
        case XmlNodeType.Element:
            {
                if (xml.Name == "RESPONSE") Console.WriteLine("Response: ");
                if (xml.Name == "FNAME")
                {
                    Console.Write("First Name: ");
                }
                if (xml.Name == "LNAME")
                {
                    Console.Write("Last Name: ");
                }
                if (xml.Name == "ADDRESS") Console.WriteLine("Address: ");
                if (xml.Name == "LINE1")
                {
                    Console.Write("Line 1: ");
                }
                if (xml.Name == "LINE2")
                {
                    Console.Write("Line 2: ");
                }
            }
            break;
        case XmlNodeType.Text:
            {
                Console.WriteLine(xml.Value);
            }
            break;
        default: break;
    }
}
Console.ReadKey();

Linq to Xml是使用。net解析Xml的现代方法

下面的代码片段将允许您访问所有的FNAME元素

var doc = XDocument.Parse(xml);
foreach (var fname in doc.Root.Elements("FNAME") {
  // fname.Value has the element value
}