C# 如何在XML中通过id获取节点?
我正在通过id使用XML创建语言翻译 XML: 此代码无效,C# 如何在XML中通过id获取节点?,c#,.net,xml,parsing,C#,.net,Xml,Parsing,我正在通过id使用XML创建语言翻译 XML: 此代码无效,xmlNodeList为空。 如何获取内容单词1_法语?请检查: DOM实现必须具有定义 属性的类型为ID。虽然类型为ID的属性可以 此版本的产品在XSD模式或DTD中定义 仅支持DTD中定义的那些名称为“ID”的属性为 不属于类型ID,除非DTD中有此定义。它在哪里实现 未知属性是否为预期的ID类型 返回null 事实上,您必须修改XML文件以指定“ID”的含义。如果不想这样做,请使用带有 因此,您需要: string filePat
xmlNodeList
为空。如何获取内容单词1_法语?请检查: DOM实现必须具有定义 属性的类型为ID。虽然类型为ID的属性可以 此版本的产品在XSD模式或DTD中定义 仅支持DTD中定义的那些名称为“ID”的属性为 不属于类型ID,除非DTD中有此定义。它在哪里实现 未知属性是否为预期的ID类型 返回null 事实上,您必须修改XML文件以指定“ID”的含义。如果不想这样做,请使用带有 因此,您需要:
string filePath = "D:\\XML\\LanguagePack.xml";
var fileInfo = new FileInfo(filePath);
var xmlDocument = new XmlDocument();
xmlDocument.Load(fileInfo.FullName);
var node = xmlDocument.SelectSingleNode("//*[@id='10001']");
return node.InnerText; // return 'Word1_French'
我建议您使用LINQtoXML来解析XML。它有很好的强类型API。按整数id获取字符串字如下所示(需要System.Xml.Linq命名空间): 甚至更少的XPath代码(需要System.Xml.XPath命名空间):
它现在返回的是什么?您对发布的代码有问题吗?由于GetElementById只能返回单个元素,您应该将结果分配给XmlNode,而不是XmlNodeList。感谢大家的回答,但是Cyril的回答符合我的要求
XmlDocument xmlDocument;
FileInfo fileInfo;
XmlNodeList xmlNodeList;
string xPath = "D:\XML\LanguagePack.xml";
fileInfo = new FileInfo(xPath);
xmlDocument = new XmlDocument();
xmlDocument.Load(fileInfo.FullName);
xmlNodeList = xmlDocument.GetElementById("10001");
return xmlNodeList[0].InnerText; //should return 'Word1_French'
string filePath = "D:\\XML\\LanguagePack.xml";
var fileInfo = new FileInfo(filePath);
var xmlDocument = new XmlDocument();
xmlDocument.Load(fileInfo.FullName);
var node = xmlDocument.SelectSingleNode("//*[@id='10001']");
return node.InnerText; // return 'Word1_French'
var xdoc = XDocument.Load(filePath);
string word = xdoc.Root.Elements()
.Where(w => (int)w.Attribute("id") == id)
.Select(w => (string)w)
.FirstOrDefault();
string word = (string)xdoc.XPathSelectElement("//word[@id='10001']");