返回没有特定子元素的xml节点

时间:2018-06-13 14:12:49

标签: c# xml xpath linq-to-xml xmldocument

我有以下代码返回所有节点和其值。 我只想返回没有某些子节点的节点。 我正在使用的代码库是

  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 / child不包含某个子节点,那么我只返回/ propschema / *。对于我的示例,如果存在子节点或

,我不想返回propshema节点

虽然我应该使用像

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

但是失败时出现了无效令牌错误 ' // DAV:schemata / 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中过滤?

0 个答案:

没有答案