C# 如何在XML中通过id获取节点?

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

我正在通过id使用XML创建语言翻译

XML:

此代码无效,
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']");