Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML/C#:仅当属性正确时才读取内容_C#_Xml_Xmlreader - Fatal编程技术网

XML/C#:仅当属性正确时才读取内容

XML/C#:仅当属性正确时才读取内容,c#,xml,xmlreader,C#,Xml,Xmlreader,我有一个XML文件,如下所示,我试图读取Name标记的内容,只有当Record标记的属性是我想要的时。(以下代码续) XML文件是: <?xml version="1.0" encoding="utf-8" ?> <Database> <Record Number="1"> <Name>John Doe</Name> <Position>1</Position> <HoursWo

我有一个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>
例如,如果将
2
传递给函数,我希望它返回字符串
“Jane Doe”
。我不熟悉XML解析,因此希望您能提供帮助

谢谢。

为此使用XPath


检查此文章:。它有一个与您的情况非常相似的示例。

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

这是一个LINQ语句,它将根据变量searchTerm为您提供名称。

数据是否太大,以至于将整个文档加载到
XmlDocument
(然后使用
SelectSingleNode()
等)是不切实际的?
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);
        }
    }
}
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; 
        } 
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;