GetElementById()无法找到标签?

8
我有一个有效的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"> 

你能发布你的XML文档(或样本)吗?你正在确定doctype中的ID吗? - Scott Arrington
实际上,在文档类型中没有 - 我会研究一下。我认为指定ID就足够了 ;( - 谢谢 - Chris
不,属性名称“id”并没有什么神奇的地方。另一方面,“xml:id”……http://www.w3.org/TR/xml-id/ - bobince
只是猜测,元素的ID区分大小写吗? - David R Tribble
它们是大小写敏感的。但我在这里更改了原始标记以保护无辜者(和我)。原始情况确实匹配。 - Chris
3个回答

6

如果没有其他办法,或许可以使用xpath作为备选方案:

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

谢谢Marc,我会选择这个方案。好主意。也感谢Anthony。 - Chris

4
你需要一个DTD来确定哪些元素上的属性将构成唯一id。在XML中,并不会自动假设id属性应该被视为唯一元素ID。
通常情况下,“未经DTD处理”的XML文件,getElementById函数并不是非常有用。大多数情况下,正在处理的XML文件的结构是已知的(例如根元素称为books,包含一系列book元素),因此典型的访问看起来会像这样:
 XmlElement book = (XmlElement)doc.DocumentElement.SelectSingleNode("book[@ID='U1_000']");

如果你不知道XML结构和/或元素的标签名称,那么Marc解答中描述的暴力搜索方法可以解决问题。


3

请查看MSDN文档以获取此方法的详细信息。在下面的示例中,您可以看到如何使用DOCTYPE来确定ID,这可能会为您解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接