簡體   English   中英

C#讀取XML標簽

[英]C# Reading XML tags

我有xml文件,我想閱讀特定標簽的內容。 我知道如何讀取名稱標簽的內容,但是我有地址標簽。 它是這樣的:

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

因此,地址標簽始終在名稱標簽之后,但是在它們之間有一個電話標簽或其他一些標簽,例如age ....現在,我需要一個循環遍歷整個文件並收集所有名稱和地址的循環。 我不知道如何在此循環中關聯名稱和地址。

使用XPath選擇所需的節點

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

您可以對地址執行相同的操作,然后遍歷節點集合

如果您有這樣的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);
}

我通過DataSet或數據表集合閱讀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查詢它(盡管此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

使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM