Проверьте, существует ли элемент XML

c# xml

125874 просмотра

12 ответа

Как кто-то может проверить, существует ли определенный элемент в файле XML? Скажем, у меня есть постоянно меняющийся XML-файл, и мне нужно проверить, что каждый элемент существует, прежде чем читать / анализировать его.

Источник Размещён: 22.10.2019 07:57

Ответы (12)


54 плюса

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

Должен это сделать (где doc - это ваш объект XmlDocument, очевидно)

В качестве альтернативы вы можете использовать XSD и проверить его

Автор: qui Размещён: 19.09.2008 11:19

5 плюса

Вы можете перебирать каждый узел и видеть, существует ли узел.

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 потому, что я подозреваю, что это приведет к появлению популярной ошибки «ссылка на объект не установлена», если узел не существует.

Автор: sangam Размещён: 11.07.2011 11:12

4 плюса

Не уверен, что вы хотите сделать, но использование DTD или схемы может быть все, что вам нужно для проверки XML.

В противном случае, если вы хотите найти элемент, вы можете использовать запрос xpath для поиска определенного элемента.

Автор: paul Размещён: 19.09.2008 11:20

4 плюса

Как насчет попробовать это:

using (XmlTextReader reader = new XmlTextReader(xmlPath))
{
    while (reader.Read())
    {
        if (reader.NodeType == XmlNodeType.Element)
        { 
            //do your code here
        }
    }
}
Автор: jomsk1e Размещён: 10.10.2012 09:15

4 плюса

// если проблема в том, чтобы "просто" проверить, что элемент существует в xml-файле, прежде чем // извлечь значение, которое вы можете сделать следующим образом

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

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

        }
        else
        {
            doctype = "";
        }
Автор: user4258853 Размещён: 16.11.2014 08:01

2 плюса

дополнительно к sangamкоду

if (chNode["innerNode"]["innermostNode"]==null)
            return true; //node    *parentNode*/innerNode/innermostNode exists
Автор: siddharth Размещён: 26.08.2012 12:41

1 плюс

Вы можете проверить это и многое другое, используя язык схемы XML, такой как XSD .

Если вы имеете в виду условно, в коде, то XPath также стоит посмотреть.

Автор: Ash Wilson Размещён: 19.09.2008 11:20

0 плюса

Ниже приведена простая функция для проверки наличия или отсутствия определенного узла в файле 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;
}
Автор: Priyadarshi Kunal Размещён: 14.04.2012 01:50

0 плюса

Немного поздно, но если это поможет, это работает для меня ...

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;
}
Автор: Mazinger Размещён: 04.06.2016 08:19

0 плюса

// Проверяем значение элемента xml, если оно существует, используя XmlReader

          using (XmlReader xmlReader = XmlReader.Create(new StringReader("XMLSTRING")))
           {

               if (xmlReader.ReadToFollowing("XMLNODE")) 

                {
                    string nodeValue = xmlReader.ReadElementString("XMLNODE");                
                }
            }     
Автор: Sumit Размещён: 28.12.2016 01:54

0 плюса

Просто столкнулся с той же проблемой, и оператор слияния нулей с SelectSingleNode сработал, назначив нуль с помощью 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
  }
Автор: Jiving Rockabilly Размещён: 28.09.2018 03:30

-2 плюса

// Я нахожу дочерний узел ERNO на втором, но последнем месте, если StrComp (xmlnode (i) .ChildNodes.Item (xmlnode (i) .ChildNodes.Count - 1) .Name.ToString (), "ERNO", CompareMethod.Text) = 0 Тогда xmlnode (i) .ChildNodes.Item (xmlnode (i) .ChildNodes.Count - 1) .InnerText = c Остальное elem = xmldoc.CreateElement ("ERNo") elem.InnerText = c.ToString root.ChildNodes (i ) .AppendChild (elem) End If

Автор: Mir Saleem Размещён: 21.02.2019 08:06
Вопросы из категории :
32x32