GetElementById () não encontrar o tag?
-
18-09-2019 - |
Pergunta
Eu tenho um arquivo XML válido lidos pelo seguinte serviço # windows .NET C. A tag em questão (u1_000) é absolutamente no elemento:
<book id="u1_000" category="xyz">
Existe alguma razão o GetElementById () não encontrar o elemento Livro com a tag? - graças
XmlDocument doc = new XmlDocument();
doc.Load("C:\\j.xml");
XmlElement ee = doc.GetElementById("U1_000");
<book id="U1_000" category="web">
Solução
Se nada mais, talvez usar XPath como um backup:
string id = "u1_000";
string query = string.Format("//*[@id='{0}']", id); // or "//book[@id='{0}']"
XmlElement el = (XmlElement)doc.SelectSingleNode(query);
Outras dicas
Verifique a documentação MSDN para este método . No exemplo abaixo, você pode ver como eles estabelecem o que o ID está usando o DOCTYPE. Isso pode resolver o problema para você.
Você precisa de um DTD para estabelecer qual atributo em elementos que consitute o ID único. Em XML não é assumido automaticamente que o atributo id
deve ser tratado como um elemento de identificação única.
Em XML geral "unDTDed" o getElementById não é muito útil. Ele maioria dos casos a estrutura do arquivo XML que está sendo processado é entendida (por exemplo, o elemento raiz é chamado books
que contém uma série de elementos book
), portanto, um acesso típico seria algo parecido com isto: -
XmlElement book = (XmlElement)doc.DocumentElement.SelectSingleNode("book[@ID='U1_000']");
Se você realmente não sei a estrutura XML e / ou o nome da marca do elemento, em seguida, a força bruta de busca descrita em resposta Marcs iria funcionar.