Проверьте, существует ли элемент XML - PullRequest
30 голосов
/ 19 сентября 2008

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

Ответы [ 12 ]

52 голосов
/ 19 сентября 2008
if(doc.SelectSingleNode("//mynode")==null)....

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

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

4 голосов
/ 16 ноября 2014

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

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

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

        }
        else
        {
            doctype = "";
        }
4 голосов
/ 10 октября 2012

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

using (XmlTextReader reader = new XmlTextReader(xmlPath))
{
    while (reader.Read())
    {
        if (reader.NodeType == XmlNodeType.Element)
        { 
            //do your code here
        }
    }
}
4 голосов
/ 11 июля 2011

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

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

4 голосов
/ 19 сентября 2008

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

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

2 голосов
/ 26 августа 2012

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

if (chNode["innerNode"]["innermostNode"]==null)
            return true; //node    *parentNode*/innerNode/innermostNode exists
1 голос
/ 19 сентября 2008

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

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

0 голосов
/ 21 февраля 2019

// Я нахожу дочерний узел ERNO на втором, но последнем месте Если StrComp (xmlnode (i) .ChildNodes. xmlnode (i) .ChildNodes.Item (xmlnode (i) .ChildNodes.Count - 1) .InnerText = c еще elem = xmldoc.CreateElement ("ERNo") elem.InnerText = c.ToString root.ChildNodes (я) .AppendChild (эль) Конец, если

0 голосов
/ 28 сентября 2018

Только что столкнулся с той же проблемой, и оператор слияния нулей с SelectSingleNode обработал обработку, присвоив нуль с помощью строки.

 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
  }
0 голосов
/ 28 декабря 2016

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

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

               if (xmlReader.ReadToFollowing("XMLNODE")) 

                {
                    string nodeValue = xmlReader.ReadElementString("XMLNODE");                
                }
            }     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...