C#XPath id()不起作用?

C#XPath id()不起作用?,c#,C#,我在用C#,我被难住了。它只是不支持id()?我有一个很大的XML文件,大约有4-5个,大约400kb,所以无论在哪里我都需要一些速度和性能 我使用XmlDocument.SelectSingleNode(“id('blahblahblah')”),但它不按id获取节点。我是疯了还是C#XPath不支持id()?用于获取具有指定id的XmlElement,例如: XmlElement elem = doc.GetElementById("blahblahblah"); 这仅适用于指定DTD的文

我在用C#,我被难住了。它只是不支持id()?我有一个很大的XML文件,大约有4-5个,大约400kb,所以无论在哪里我都需要一些速度和性能

我使用XmlDocument.SelectSingleNode(“id('blahblahblah')”),但它不按id获取节点。我是疯了还是C#XPath不支持id()?

用于获取具有指定id的XmlElement,例如:

XmlElement elem = doc.GetElementById("blahblahblah");
这仅适用于指定DTD的文档,但:

名为“ID”的属性不是ID类型,除非在DTD中定义


如果文档没有DTD,可以使用XPath表达式选择id属性设置为id的节点:

XmlElement elem = doc.SelectSingleNode("//*[@id='blahblahblah']");
可能是更好的选择。

“官方”XPath说:

id
函数根据元素的唯一id选择元素

在哪里

元素节点可以具有唯一标识符(ID)。这是DTD中声明为类型ID的属性的值。文档中的两个元素不能具有相同的唯一ID。如果XML处理器报告文档中的两个元素具有相同的唯一ID(仅当文档无效时才可能)然后,文档顺序中的第二个元素必须被视为没有唯一ID

注意:如果文档没有DTD,那么文档中的任何元素都不会有唯一的ID


+1用于说明id()函数与DTD中的相应引用相关联。我将如何引用DTD?我的意思是我知道怎么做,我只是想确保它能工作,所以我也可以问一下。我发现:在Untitled1.xsd模式中(为了清晰起见省略),id属性被声明为xs:id。那么Untitles1.xsd中会有什么呢?啊。嘿,你好,BB
xmlDocument.GetElementById("blahblahblah")