C#正在读取XML标记

本文关键字:XML 标记 读取 | 更新日期: 2023-09-27 18:01:01

我有xml文件,我想读取特定标记的内容。我知道如何阅读姓名标签的内容,但我有地址标签。它是这样的:

<name>ANdrew</name>
<phone>456778</phone>
<address>Wooden street</address>
<name>John</name>
<phone>758465</phone>
<age>45</age>
<address>Steel street</address>

所以地址标签总是在名字标签之后,但在它们之间有一个电话标签,或者可能是一些其他标签,比如年龄。。。。现在我需要一个循环,它将遍历整个文件并收集所有的名称和地址。我不知道如何在这个循环中把名字和地址联系起来。。。。

C#正在读取XML标记

如果您有这样的xml:

<Names>
<Name>
    <FirstName>John</FirstName>
    <LastName>Smith</LastName>
</Name>
<Name>
    <FirstName>James</FirstName>
    <LastName>White</LastName>
</Name>

你可以使用这个代码:

    XmlDocument xml = new XmlDocument();
xml.LoadXml(myXmlString); // suppose that myXmlString contains "<Names>...</Names>"
XmlNodeList xnList = xml.SelectNodes("/Names/Name");
foreach (XmlNode xn in xnList)
{
  string firstName = xn["FirstName"].InnerText;
  string lastName = xn["LastName"].InnerText;
  Console.WriteLine("Name: {0} {1}", firstName, lastName);
}

使用XPath选择需要的节点

var nodes = document.SelectNodes("//root/name")

您可以对地址执行同样的操作,然后在节点集合

上迭代

您可以使用Linq到XML查询它(尽管该XML的格式应该有所不同(:

string xml = @"<Names>
                   <name>ANdrew</name>
                   <phone>456778</phone>
                   <address>Wooden street</address>
                   <name>John</name>
                   <phone>758465</phone>
                   <age>45</age>
                   <address>Steel street</address>
               </Names>";
XDocument doc = XDocument.Parse(xml);
var names = doc.Root.Elements("name").Select(n => n.Value);
var addresses = doc.Root.Elements("address").Select( a => a.Value);
var results = names.Zip(addresses, (name, address) => name + " has the following address: " + address);
foreach (var r in results)
    Console.WriteLine(r);  // ANdrew has the following address: Wooden street
                           // John has the following address: Steel street

我通过数据集或数据表集合读取xml文档。 string xmlPath = "C:'blabla.xml";StreamReader streamRead = new StreamReader(xmlPath)byte[] fullByte = Encoding.ASCII.GetBytes(streamRead.ReadToEnd());DataSet dataSet = new DataSet();MemoryStream mStream = new MemoryStream(fullByte);dataSet.ReadXml(mStream);

使用LINQ to XML,您可以选择name元素,然后访问ElementsAfterSelf("address").First(),例如

            XDocument doc = XDocument.Parse(@"<root><name>ANdrew</name>
<phone>456778</phone>
<address>Wooden street</address>
<name>John</name>
<phone>758465</phone>
<age>45</age>
<address>Steel street</address>
</root>");
            foreach (XElement name in doc.Root.Elements("name"))
            {
                Console.WriteLine("{0}: {1}", (string)name, (string)name.ElementsAfterSelf("address").First());
            }

当然,如果您有一个XML文件,请使用XDocument.Load("input.xml")而不是Parse