GetElementById () не находит тег? - PullRequest
       12

GetElementById () не находит тег?

7 голосов
/ 05 января 2010

У меня есть действительный файл XML, который читается следующей службой Windows .NET C #. Соответствующий тег (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 ]

4 голосов
/ 05 января 2010

Если ничего другого, возможно, используйте xpath в качестве резервной копии:

string id = "u1_000";
string query = string.Format("//*[@id='{0}']", id); // or "//book[@id='{0}']"
XmlElement el = (XmlElement)doc.SelectSingleNode(query);
3 голосов
/ 05 января 2010

Вам необходим DTD, чтобы установить, какой атрибут элементов будет составлять уникальный идентификатор. В XML автоматически не предполагается, что атрибут id должен рассматриваться как уникальный идентификатор элемента.

В общем случае «unDTDed» XML getElementById не очень полезен. В большинстве случаев понятна структура обрабатываемого XML-файла (например, корневой элемент называется books, который содержит серию book элементов), поэтому типичный доступ будет выглядеть примерно так: -

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

Если вы действительно не знаете структуру XML и / или имя тега элемента, тогда будет работать поиск методом грубой силы, описанный в ответе Марка.

3 голосов
/ 05 января 2010

Проверьте документацию MSDN для этого метода . В приведенном ниже примере вы можете увидеть, как они устанавливают, какой идентификатор использует DOCTYPE. Это может решить проблему для вас.

...