<tags>
<data mode="add" name="ttt" oldindex="-1" index="-1" oldnumber="1" number="1" type="VAR_INT" value="72" />
<data mode="delete" name="test3d" oldindex="-1" index="-1" oldnumber="1" number="1" type="VAR_INT" value="72" />
</tags>
我想检查xml中是否存在“mode”
xdDiffData.XPathSelectElement("//tags[@mode='add']") != null && xdDiffData.XPathSelectElement("//tags[@mode='delete']") != null
这总是给出错误......如何做到这一点......?
答案 0 :(得分:2)
如果要确保每个mode
元素中都存在data
属性,那么您应该更好地迭代所有数据元素,以便以这种方式查找mode
属性:< / p>
XDocument doc = XDocument.Load("XmlFile.xml");
var nodes = doc.Descendants("data");
foreach (var node in nodes)
{
var attrMode = node.Attribute("mode");
if (attrMode == null)
{
// mode attribute is not available for this data element
}
}
使用Linq:
if (nodes.Where(c => c.Attribute("mode") == null).Count() == 0)
{
var result = nodes.All(e =>
e.Attribute("mode").Value.Equals("add") ||
e.Attribute("mode").Value.Equals("delete"));
}
else
{
// 'mode' attribute is missing for one or more 'data' element(s)
}
如果result
等于true
,则表示所有数据元素的mode
属性都设置为值"add"
或"delete"
。
答案 1 :(得分:0)
您缺少'data'元素。尝试
xdDiffData.XPathSelectElement("//tags/data[@mode='add']") != null && xdDiffData.XPathSelectElement("//tags/data[@mode='delete']") != null
答案 2 :(得分:0)
xdDiffData.XPathSelectElement("/tags/data[@mode='add']") != null
答案 3 :(得分:0)
我想检查xml中是否存在“mode”
使用强>:
//@mode
如果此XPath表达式选择节点,则意味着XML文档中存在名为mode
的属性。
或者你可以使用:
boolean(//@mode)
这会产生一个布尔值 - true()
或false()