C# 检查XML元素是否存在

C# 检查XML元素是否存在,c#,xml,C#,Xml,如何验证XML文件中是否存在特定元素?假设我有一个不断变化的XML文件,我需要在读取/解析它之前验证每个元素是否存在 if(doc.SelectSingleNode("//mynode")==null).... 应该这样做(显然,doc是XmlDocument对象) 或者,您可以使用XSD并根据它进行验证,但不确定您想要做什么,但使用DTD或模式可能是验证xml所需的全部 否则,如果您想查找一个元素,您可以使用xpath查询来搜索特定的元素。您可以通过使用XML模式语言来验证这一点,甚至更多,

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

if(doc.SelectSingleNode("//mynode")==null)....
应该这样做(显然,doc是XmlDocument对象)


或者,您可以使用XSD并根据它进行验证,但不确定您想要做什么,但使用DTD或模式可能是验证xml所需的全部


否则,如果您想查找一个元素,您可以使用xpath查询来搜索特定的元素。

您可以通过使用XML模式语言来验证这一点,甚至更多,如


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

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

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

迭代节点(假设这是根节点)下的每个节点元素,并检查名为“innerNode”(如果需要,添加其他节点)的节点是否存在。try..catch是因为我怀疑如果节点不存在,这将抛出流行的“object reference not set”错误。

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

除sangamcode之外

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

试试这个怎么样:

using (XmlTextReader reader = new XmlTextReader(xmlPath))
{
    while (reader.Read())
    {
        if (reader.NodeType == XmlNodeType.Element)
        { 
            //do your code here
        }
    }
}
//如果问题是“只是”在您之前验证xml文件中是否存在该元素 //提取您可以这样做的值

XmlNodeList YOURTEMPVARIABLE = doc.GetElementsByTagName("YOUR_ELEMENTNAME");

        if (YOURTEMPVARIABLE.Count > 0 )
        {
            doctype = YOURTEMPVARIABLE[0].InnerXml;

        }
        else
        {
            doctype = "";
        }

有点晚了,但如果有帮助的话,这对我来说很有用

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

刚刚遇到同样的问题,null合并运算符SelectSingleNode一起处理,将null与string.Empty赋值

 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
  }

//我在第二但最后一名找到了childnode ERNO

If StrComp(xmlnode(i).ChildNodes.Item(xmlnode(i).ChildNodes.Count - 1).Name.ToString(), "ERNO", CompareMethod.Text) = 0 Then
                xmlnode(i).ChildNodes.Item(xmlnode(i).ChildNodes.Count - 1).InnerText = c
            Else
                elem = xmldoc.CreateElement("ERNo")
                elem.InnerText = c.ToString
                root.ChildNodes(i).AppendChild(elem)
            End If

sam“如何”这个问题的答案在哪里?这个问题不是特别清楚,所以给几个提示是很好的。在xpath或dtd上进一步搜索将得到比你所能得到的更多的代码!。你有什么特别的问题吗?我会尽力提供帮助。“/”代表什么?@Qsiris“/”是XPath,表示选择任何元素mynode,无论它在哪里。请确保在发布答案之前格式化代码块,因为在当前状态下它是不可读的。
 string name = "some node name";
    var xDoc = XDocument.Load("yourFile");
    var docRoot = xDoc.Element("your docs root name");

     var aNode = docRoot.Elements().Where(x => x.Name == name).FirstOrDefault();
                if (aNode == null)
                {
                    return $"file has no {name}";
                }