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"> 
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top