Лучшим способом тест для существования XPath в XML-файле?

Это верно. По своему дизайну вы не можете редактировать настройки пользователя других людей.

Это потому, что у человека в вашем рабочем пространстве могут быть другие рабочие пространства (будь то свои или чужие). Вы являетесь только чьим-то администратором в вашем конкретном рабочем пространстве, и они могут иметь другие рабочие места помимо вашего.

6
задан Mark Allen 28 October 2008 в 23:56
поделиться

6 ответов

Если Вы дали допустимый XPath, но он ничему не соответствует, SelectSingleNode не бросит a NullReferenceException - это просто возвратит пустой указатель.

Если Вы передаете SelectSingleNode некоторый синтаксически недопустимый XPath, именно тогда это бросит XPathException.

Таким образом, обычно необходимо было бы просто протестировать, было ли возвращенное значение нулевым или нет.

11
ответ дан 8 December 2019 в 18:43
поделиться
 var baz = navigator.SelectSingleNode("//foo/bar/@baz");
 if (baz != null) Console.WriteLine(baz);
1
ответ дан 8 December 2019 в 18:43
поделиться

Из памяти, может содержать ошибки.

XDocument doc = XDocument.Load("foo.xml");

var att = from a in doc.Descendants("bar")
          select a.Attribute("baz")

foreach (var item in att) {
    if (item != null) { ... }
}
0
ответ дан 8 December 2019 в 18:43
поделиться

Если node == null затем node.HasAttributes бросит a NullReferenceException. Эта ситуация произойдет когда //foo/bar не соответствует никаким элементам в XML-документе.

0
ответ дан 8 December 2019 в 18:43
поделиться
var node = XDocument.Load(filename)
                    .Descendants("bar")
                    .SingleOrDefault(e=>e.Attribute("baz") != null);

if (node != null) Console.WriteLine(node.Attribute("baz").Value);
0
ответ дан 8 December 2019 в 18:43
поделиться

Я, вероятно, был бы более конкретным в своем xpath.

        var doc = XDocument.Load(fileName);

        var results = from r in doc.XPathSelectElements("/foo/bar[count(@baz) > 0]")
                      select r.Attribute("baz");

        foreach (String s in results)
            Console.WriteLine(s);
0
ответ дан 8 December 2019 в 18:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: