Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Вы можете выполнять итерацию через каждый node и видеть, существует ли node.

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) и проверяете, существует ли node с именем 'innerNode' (добавьте другие, если вам нужно). try..catch - это потому, что я подозреваю, что это вызовет популярную ошибку 'object reference not set', если node не существует.

Ответ 3

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

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

Ответ 4

Как пробовать это:

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

Ответ 5

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

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

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

        }
        else
        {
            doctype = "";
        }

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

Ниже приведена простая функция, чтобы проверить, присутствует ли какой-либо конкретный node или нет в 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;
}

Ответ 9

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

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

Ответ 10

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

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

               if (xmlReader.ReadToFollowing("XMLNODE")) 

                {
                    string nodeValue = xmlReader.ReadElementString("XMLNODE");                
                }
            }