检查XML元素是否存在

有人如何validationXML文件中是否存在特定元素? 假设我有一个不断变化的XML文件,我需要在读取/解析它之前validation每个元素是否存在。

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

应该这样做(显然doc是你的XmlDocument对象)

或者,您可以使用XSD并对其进行validation

不确定您想要做什么但是使用DTD或模式可能就是validation xml所需的全部内容。

否则,如果要查找元素,可以使用xpath查询来搜索特定元素。

您可以遍历每个节点并查看节点是否存在。

 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.} } 

您遍历节点下的每个Node元素(比如这是root),并检查是否存在名为’innerNode’的节点(如果需要,添加其他节点)。 try..catch是因为我怀疑如果节点不存在,这将抛出流行的’对象引用未设置’错误。

尝试这个怎么样:

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

//如果问题是“只是”在//提取值之前validation元素是否存在于xml文件中你可以这样做

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

除了sangam代码

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

您可以使用XML模式语言(如XSD)来validation这一点以及更多内容。

如果你的意思是有条件的,在代码中,那么XPath也值得一看。

以下是一个简单的函数,用于检查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; } 

有点晚了,但如果有帮助,这对我有用……

 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; } 

//使用XmlReader检查xml元素值是否存在

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

刚遇到同样的问题,使用SelectSingleNodenull-coalescing运算符处理了一个处理,使用string.Empty赋值null

  foreach (XmlNode txElement in txElements) { var txStatus = txElement.SelectSingleNode(".//ns:TxSts", nsmgr).InnerText ?? string.Empty; var endToEndId = txElement.SelectSingleNode(".//ns:OrgnlEndToEndId", nsmgr).InnerText ?? string.Empty; var paymentAmount = txElement.SelectSingleNode(".//ns:InstdAmt", nsmgr).InnerText ?? string.Empty; var paymentAmountCcy = txElement.SelectSingleNode(".//ns:InstdAmt", nsmgr).Attributes["Ccy"].Value ?? string.Empty; var clientId = txElement.SelectSingleNode(".//ns:OrgnlEndToEndId", nsmgr).InnerText ?? string.Empty; var bankSortCode = txElement.SelectSingleNode(".//ns:OrgnlEndToEndId", nsmgr).InnerText ?? string.Empty; //TODO finish Object creation and Upsert DB }