我有一個代碼讀取一個XML文件。有一些我不明白的地方。 從我的理解,代碼將創建一個包含2個元素的012文件, 「Product」和「OtherDetails」。我們怎麼只需要使用writer.WriteEndElement(); 曾經當我們使用writer.WriteStartElement兩次? ,不應該用writer.WriteEndElement()語句關閉每個 writer.WriteStartElement語句嗎?如何在C#中讀取xml文件?
using System.Xml;
public class Program
{
public static void Main()
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter writer = XmlWriter.Create("Products.xml", settings);
writer.WriteStartDocument();
writer.WriteComment("This file is generated by the program.");
writer.WriteStartElement("Product"); // first s
writer.WriteAttributeString("ID", "001");
writer.WriteAttributeString("Name", "Soap");
writer.WriteElementString("Price", "10.00")
// Second Element
writer.WriteStartElement("OtherDetails");
writer.WriteElementString("BrandName", "X Soap");
writer.WriteElementString("Manufacturer", "X Company");
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
}
}
using System;
using System.Xml;
public class Program
{
public static void Main()
{
XmlReader reader = XmlReader.Create("Products.xml");
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element
&& reader.Name == "Product")
{
Console.WriteLine("ID = " + reader.GetAttribute(0));
Console.WriteLine("Name = " + reader.GetAttribute(1));
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.Read();
if (reader.Name == "Price")
{
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.Read();
if (reader.NodeType == XmlNodeType.Text)
{
Console.WriteLine("Price = {0:C}", Double.Parse(reader.Value));
}
}
reader.Read();
} //end if
if (reader.Name == "OtherDetails")
{
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.Read();
if (reader.Name == "BrandName")
{
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.Read();
if (reader.NodeType == XmlNodeType.Text)
{
Console.WriteLine("Brand Name = " + reader.Value);
}
}
reader.Read();
} //end if
if (reader.Name == "Manufacturer")
{
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.Read();
if (reader.NodeType == XmlNodeType.Text)
{
Console.WriteLine("Manufacturer = " + reader.Value);
}
}
} //end if
}
} //end if
} //end while
} //end if
} //end while
}
}
我沒有得到這個部分:
if (reader.Name == "OtherDetails")
{
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.Read();
if (reader.Name == "BrandName")
{
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.Read();
if (reader.NodeType == XmlNodeType.Text)
{
Console.WriteLine("Brand Name = " + reader.Value);
}
}
通知如何病情while (reader.NodeType != XmlNodeType.EndElement)
已經被使用了兩次?
這是爲什麼我們沒有指定
if (reader.NodeType == XmlNodeType.Element for OtherDetails)
,因爲我們沒有爲產品,
這樣
if (reader.NodeType == XmlNodeType.Element
&& reader.Name == "OtherDetails")
{}
你*有*使用的XmlWriter?如果你可以使用LINQ to XML,那麼編碼就會簡單得多。 – 2013-05-10 20:00:21
我更喜歡使用XmlDocument來讀取XML文件。您可以輕鬆循環遍歷每個節點和每個節點的子節點。 – 2013-05-10 20:11:39
@HH你有沒有試過Linq2Xml?你所說的所有事情都可以做得更容易。 – I4V 2013-05-10 20:13:23