我有一个XML文件,如下所示,我正在尝试读取Name标签的内容,只有Record标签的属性是我想要的。 (续下面的代码)
XML文件是:
<?xml version="1.0" encoding="utf-8" ?>
<Database>
<Record Number="1">
<Name>John Doe</Name>
<Position>1</Position>
<HoursWorked>290</HoursWorked>
<LastMonthChecked>0310</LastMonthChecked>
</Record>
<Record Number="2">
<Name>Jane Doe</Name>
<Position>1</Position>
<HoursWorked>251</HoursWorked>
<LastMonthChecked>0310</LastMonthChecked>
</Record>
</Database>
这是我到目前为止的C#代码:
public static string GetName(int EmployeeNumber)
{
XmlTextReader DataReader = new XmlTextReader("Database.xml");
DataReader.MoveToContent();
while (DataReader.Read())
{
if (DataReader.NodeType == XmlNodeType.Element
&& DataReader.HasAttributes && DataReader.Name == "Record")
{
DataReader.MoveToAttribute(EmployeeNumber);
DataReader.MoveToContent();
if (DataReader.NodeType == XmlNodeType.Element
&& DataReader.Name == "Name")
{
return DataReader.ReadContentAsString();
}
}
}
}
例如,如果将2
传递给函数,我希望它返回字符串"Jane Doe"
。我是XML解析的新手,所以任何帮助都会受到赞赏。
感谢。
答案 0 :(得分:3)
使用XPath。
查看此文章:http://www.developer.com/xml/article.php/3383961/NET-and-XML-XPath-Queries.htm。它有一个与你的情况非常相似的例子。
答案 1 :(得分:1)
如果你的XML不是很大,你可以使用XPath:
using System;
using System.Xml.Linq;
using System.Xml.XPath;
public class Program
{
static void Main(string[] args)
{
var elements = XDocument.Load("Database.xml")
.XPathSelectElements("//Record[@Number='2']/Name");
foreach (var item in elements)
{
Console.WriteLine(item.Value);
}
}
}
答案 2 :(得分:1)
Could you try something like this:-
public static string GetName(int EmployeeNumber)
{
XmlDocument doc = new XmlDocument();
doc.Load("Database.xml");
XmlElement rootNode = doc.DocumentElement;
String query ="Record[@Number='"+EmployeeNumber.ToString()+"']/Name";
XmlNode data= rootNode.SelectSingleNode(query);
return data.InnerText;
}
答案 3 :(得分:1)
string searchTerm = "2";
var list = from XElement segment in workingXmlDocument.Descendants(wix + "File")
where segment.Attribute("Id").Value.ToString() == searchTerm
select segment.Descendant("Name").Value;
这是一个LINQ语句,它将根据变量searchTerm为您提供名称。