我有xml文件,我想阅读特定标签的内容。 我知道如何阅读名称标签的内容,但我有地址标签。 它是这样的:
<name>ANdrew</name>
<phone>456778</phone>
<address>Wooden street</address>
<name>John</name>
<phone>758465</phone>
<age>45</age>
<address>Steel street</address>
所以地址标签总是在名称标签之后,但在它们之间有一个电话标签或者其他一些标签,如年龄.... 现在我需要一个循环,它将遍历整个文件并收集所有的名称和地址。我不知道如何在这个循环中关联姓名和地址......
答案 0 :(得分:1)
使用XPath选择您需要的节点
var nodes = document.SelectNodes("//root/name")
您可以对地址执行相同的操作,然后迭代节点集合
答案 1 :(得分:0)
如果你有这样的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);
}
答案 2 :(得分:0)
我通过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);
答案 3 :(得分:0)
您可以使用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
答案 4 :(得分:0)
使用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
。