C# GetElementById()找不到标记?

C# GetElementById()找不到标记?,c#,xml,getelementbyid,C#,Xml,Getelementbyid,我有一个有效的XML文件正在被下面的.NET C#windows服务读取。 所讨论的标记(u1_000)绝对位于元素中: <book id="u1_000" category="xyz"> GetElementById()找不到带有标记的Book元素有什么原因吗谢谢 XmlDocument doc = new XmlDocument(); doc.Load("C:\\j.xml"); XmlElement ee = doc.GetElementById("U1_000");

我有一个有效的XML文件正在被下面的.NET C#windows服务读取。 所讨论的标记(u1_000)绝对位于元素中:

<book id="u1_000" category="xyz"> 

GetElementById()找不到带有标记的Book元素有什么原因吗谢谢

XmlDocument doc = new XmlDocument();
doc.Load("C:\\j.xml");
XmlElement ee = doc.GetElementById("U1_000");

<book id="U1_000" category="web"> 
XmlDocument doc=新的XmlDocument();
doc.Load(“C:\\j.xml”);
xmlementee=doc.GetElementById(“U1_000”);

请检查。在下面的示例中,您可以看到他们如何使用DOCTYPE确定ID。这可能会为您解决问题。

如果没有其他问题,请使用xpath作为备份:

string id = "u1_000";
string query = string.Format("//*[@id='{0}']", id); // or "//book[@id='{0}']"
XmlElement el = (XmlElement)doc.SelectSingleNode(query);

您需要DTD来确定元素上的哪个属性将构成唯一id。在XML中,不会自动假定
id
属性应被视为唯一元素id

一般来说,“unDTDed”XML的getElementById不是很有用。在大多数情况下,被处理的XML文件的结构是可以理解的(例如,根元素被称为
books
,它包含一系列
book
元素),因此典型的访问如下所示:-

 XmlElement book = (XmlElement)doc.DocumentElement.SelectSingleNode("book[@ID='U1_000']");

如果您真的不知道XML结构和/或元素的标记名,那么Marcs answer中描述的暴力搜索将起作用。

您可以发布XML文档(或示例)吗?你在确定doctype中的ID是什么吗?事实上,不,不在doc类型中-我将对此进行研究。认为指定id是enuf;(-thanksNope,属性名“id”没有什么神奇之处,“.xml:id”,另一方面…只是一个猜测,但是元素id区分大小写吗?它们区分大小写。但是我在这里更改了这个标记,以保护无辜者(和我).原来的箱子确实匹配.谢谢Marc,我会走这条路.好主意.也谢谢Anthony。