Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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
C# C XmlDocument SelectNodes不工作_C#_Xml_Selectnodes - Fatal编程技术网

C# C XmlDocument SelectNodes不工作

C# C XmlDocument SelectNodes不工作,c#,xml,selectnodes,C#,Xml,Selectnodes,我想从XML文件中获取值,但失败了。你能帮我指出这个问题吗??因为我已经非常努力地进行测试和谷歌搜索,但我仍然无法发现问题 XML: 我只想得到FirstName,LastName,Email地址,SelectNodes函数不能像预期的那样工作。。。一点线索也没有。。。请帮忙。提前感谢您需要这样的东西: XmlDocument xmldoc=新的XmlDocument; xmldoc。Load@D:\temp\contacts.xml;//使用.Load方法-而不是.LoadXml!! //获取

我想从XML文件中获取值,但失败了。你能帮我指出这个问题吗??因为我已经非常努力地进行测试和谷歌搜索,但我仍然无法发现问题

XML:


我只想得到FirstName,LastName,Email地址,SelectNodes函数不能像预期的那样工作。。。一点线索也没有。。。请帮忙。提前感谢

您需要这样的东西:

XmlDocument xmldoc=新的XmlDocument; xmldoc。Load@D:\temp\contacts.xml;//使用.Load方法-而不是.LoadXml!! //获取所有节点的列表 XmlNodeList-listOfContacts=xmldoc.SelectNodes/Contacts/Contact; //在节点上迭代 联系人列表中的foreach XmlNode singleContact { //获取配置文件/个人子节点 XmlNode personalNode=singleContact.SelectSingleNodeProfiles/Personal; //从节点获取值 如果personalNode!=null { string firstName=personalNode.SelectSingleNodeFirstName.InnerText; string lastName=personalNode.SelectSingleNodeLastName.InnerText; } //获取节点 XmlNodeList emailNodes=singleContact.SelectNodesEmails/Email; emailNodes中的foreach XmlNode emailNode { 字符串emailTyp=emailNode.SelectSingleNodeEmailType.InnerText; 字符串emailAddress=emailNode.SelectSingleNodeAddress.InnerText; } }
使用这种方法,您应该能够正确读取所需的所有数据。

XML标记取决于大小写,因此请联系!=联系方式


首先更改此选项。

问题在于SelectNodes方法采用区分大小写的XPath表达式

XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load("TheXMLFile.xml");

            Console.WriteLine($"Contact: {xmldoc.DocumentElement.SelectNodes("Contact").Count}"); // return 2
            Console.WriteLine($"/Contact: {xmldoc.DocumentElement.SelectNodes("/Contact").Count}"); // return 0, and it is the expected!
            Console.WriteLine($"//Contact: {xmldoc.DocumentElement.SelectNodes("//Contact").Count}"); // return 2

            foreach (XmlNode firstName in xmldoc.DocumentElement.SelectNodes("//Profiles/Personal/FirstName"))
            {
                Console.WriteLine($"firstName {firstName.InnerText}");
            }

在上面的代码中,你可以看到两个名字,我的名字和人。我只需将第一个字符更改为大写的contact->contact。

我可以使用foreach循环作为contact,然后在循环中选择一封电子邮件吗???@user2402624:如果您只想从多封电子邮件中选择一封-是的,您可以这样做。我知道这是一封旧邮件,但从我所看到的情况来看,如果要使用Xpath语句从XMLNodeList中选择节点,则LoadXML不起作用。无论如何安排Xpath,我都得到了相同的结果-0。这个错误有解决办法吗?看看这篇文章:指向@Davor——但他不应该只是链接到一个页面。也和OP的示例无关,但若XML数据有一个名称空间,那个么SelectNodes需要一个名称空间管理器才能成功。
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml("TheXMLFile.xml");

xmldoc.DocumentElement.SelectNodes("contact")  // return 0 counts
xmldoc.DocumentElement.SelectNodes("/contact")  // return 0 counts
xmldoc.DocumentElement.SelectNodes("/contact")  // return 0 counts
xmldoc.DocumentElement.SelectNodes("/contacts/contact")  // return 0 counts
xmldoc.DocumentElement.SelectNodes("*")  // return 2 counts  !this works

XmlNodeList elemList = xmldoc.DocumentElement.GetElementsByTagName("contact"); // return 2 counts  !this also works
foreach (XmlNode node in elemList)
{    
    node.SelectSingleNode("Profiles")  //return ""
    node.SelectSingleNode("/Profiles")  //return ""
    node.SelectSingleNode("//Profiles")  //return ""
    node.SelectSingleNode(".//Profiles")  //return ""
}
XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load("TheXMLFile.xml");

            Console.WriteLine($"Contact: {xmldoc.DocumentElement.SelectNodes("Contact").Count}"); // return 2
            Console.WriteLine($"/Contact: {xmldoc.DocumentElement.SelectNodes("/Contact").Count}"); // return 0, and it is the expected!
            Console.WriteLine($"//Contact: {xmldoc.DocumentElement.SelectNodes("//Contact").Count}"); // return 2

            foreach (XmlNode firstName in xmldoc.DocumentElement.SelectNodes("//Profiles/Personal/FirstName"))
            {
                Console.WriteLine($"firstName {firstName.InnerText}");
            }