C# C XmlDocument SelectNodes不工作
我想从XML文件中获取值,但失败了。你能帮我指出这个问题吗??因为我已经非常努力地进行测试和谷歌搜索,但我仍然无法发现问题 XML: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!! //获取
我只想得到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}");
}