вернуть узел XML, у которого нет определенных дочерних элементов - PullRequest
0 голосов
/ 13 июня 2018

У меня есть следующий код, который возвращает все узлы и их значения.Я только хочу вернуть узлы, которые не имеют определенных дочерних узлов.Моя кодовая база, с которой я работаю, является

  XmlNodeList nodelist = xmlDoc.SelectNodes("//DAV:schemata/DAV:classschema[@name='Tapestry']/DAV:propschema/DAV:*", nsmgr);
            foreach (XmlNode node in nodelist)
            {
                strNode = node.Name;
                strValue = node.InnerText;
                responseString += strNode + " " + strValue + "\r\n ";          
            }
            return responseString;

Так что мне нужно только то, что вернуть / propschema / *, если / propschema / child не содержит определенного дочернего узла.Для моего примера я не хочу возвращать узел propshema, если есть дочерний узел или

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

XmlNodeList nodelist = xmlDoc.SelectNodes("//DAV:schemata/DAV:classschema[@name='Tapestry']/DAV:propschema/DAV:*[not (count[system>0])", nsmgr);

Но это не удается сошибка неверного токена '// DAV: схемы / DAV: classschema [@ name =' Tapestry '] / DAV: propschema / DAV: * [not (count [system> 0])' 'имеет недопустимый токен.

Что я здесь не так делаю?Я пропускаю синтаксис "" или что-то еще?

Я определил, что если я смогу использовать фильтр в XPATH, я бы применил его не в той точке.Я хочу вернуть все узлы propschema и их детей, кроме случаев, когда у proschema был дочерний узел.Поэтому мне нужно поставить файлер раньше

  XmlNodeList nodelist = xmlDoc.SelectNodes("//DAV:schemata/DAV:classschema[@name='Tapestry']/DAV:propschema[filter for system]/DAV:*", nsmgr);

Но всякий раз, когда я пытаюсь использовать фильтр типа «не» или типа, я получаю ошибку токена.

Можно ли фильтровать напрямую вXPATH?

...