GetElementById()没有找到标签?

时间:2010-01-04 23:50:29

标签: 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");

<book id="U1_000" category="web"> 

3 个答案:

答案 0 :(得分:4)

如果没有别的,也许使用xpath作为备份:

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

答案 1 :(得分:3)

检查MSDN documentation for this method。在下面的示例中,您可以看到它们如何使用DOCTYPE确定ID的内容。这可能会解决您的问题。

答案 2 :(得分:3)

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

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

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

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