write read leer example ejemplo documentelement create crear c# xml

c# - read - Compruebe si existe elemento XML



write xml c# (10)

¿Cómo puede alguien validar que un elemento específico existe en un archivo XML? Digamos que tengo un archivo XML siempre cambiante y necesito verificar que cada elemento exista antes de leerlo / analizarlo.


¿Qué tal intentar esto?

using (XmlTextReader reader = new XmlTextReader(xmlPath)) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { //do your code here } } }


Puede validar eso y mucho más utilizando un lenguaje de esquema XML, como XSD .

Si se refiere condicionalmente, dentro del código, también vale la pena echarle un vistazo a XPath .


No estoy seguro de lo que quiere hacer, pero usar un DTD o esquema puede ser todo lo que necesita para validar el xml.

De lo contrario, si quiere encontrar un elemento, puede usar una consulta xpath para buscar un elemento en particular.


Puede iterar a través de cada nodo y ver si existe un nodo.

doc.Load(xmlPath); XmlNodeList node = doc.SelectNodes("//Nodes/Node"); foreach (XmlNode chNode in node) { try{ if (chNode["innerNode"]==null) return true; //node exists //if ... check for any other nodes you need to }catch(Exception e){return false; //some node doesn''t exists.} }

Usted itera a través de todos los elementos de Nodo bajo Nodos (digamos que esto es raíz) y verifica si existe un nodo llamado ''innerNode'' (agregue otros si necesita). try..catch es porque sospecho que esto arrojará el popular error de ''referencia de objeto no establecido'' si el nodo no existe.


La siguiente es una función simple para verificar si un nodo particular está presente o no en el archivo xml.

public boolean envParamExists(String xmlFilePath, String paramName){ try{ Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(xmlFilePath)); doc.getDocumentElement().normalize(); if(doc.getElementsByTagName(paramName).getLength()>0) return true; else return false; }catch (Exception e) { //error handling } return false; }


adicionalmente al código sangam

if (chNode["innerNode"]["innermostNode"]==null) return true; //node *parentNode*/innerNode/innermostNode exists


// si el problema es "solo" para verificar que el elemento exista en el archivo xml antes de // extraer el valor, podría hacer esto

XmlNodeList YOURTEMPVARIABLE = doc.GetElementsByTagName("YOUR_ELEMENTNAME"); if (YOURTEMPVARIABLE.Count > 0 ) { doctype = YOURTEMPVARIABLE[0].InnerXml; } else { doctype = ""; }


Un poco tarde, pero si ayuda, esto funciona para mí ...

XmlNodeList NodoEstudios = DocumentoXML.SelectNodes("//ALUMNOS/ALUMNO[@id=/"" + Id + "/"]/estudios"); string Proyecto = ""; foreach(XmlElement ElementoProyecto in NodoEstudios) { XmlNodeList EleProyecto = ElementoProyecto.GetElementsByTagName("proyecto"); Proyecto = (EleProyecto[0] == null)?"": EleProyecto[0].InnerText; }


if(doc.SelectSingleNode("//mynode")==null)....

Debería hacerlo (donde doc es su objeto XmlDocument, obviamente)

Alternativamente, podría usar un XSD y validar en contra de eso


// Verifique el valor del elemento xml si existe usando XmlReader

using (XmlReader xmlReader = XmlReader.Create(new StringReader("XMLSTRING"))) { if (xmlReader.ReadToFollowing("XMLNODE")) { string nodeValue = xmlReader.ReadElementString("XMLNODE"); } }