1
    <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中是否存在“模式”

        xdDiffData.XPathSelectElement("//tags[@mode='add']") != null &&        xdDiffData.XPathSelectElement("//tags[@mode='delete']") != null

这总是给出错误的......如何做到这一点......?

4

4 回答 4

2

如果您想确保mode每个元素中都存在该属性data,那么您应该更好地迭代所有数据元素以通过mode以下方式查找该属性:

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属性都设置为 value"add""delete"

于 2012-11-20T06:01:12.563 回答
0

您缺少“数据”元素。尝试

xdDiffData.XPathSelectElement("//tags/data[@mode='add']") != null &&        xdDiffData.XPathSelectElement("//tags/data[@mode='delete']") != null
于 2012-11-20T05:53:54.653 回答
0
    xdDiffData.XPathSelectElement("/tags/data[@mode='add']") != null
于 2012-11-20T05:55:23.543 回答
0

我想检查xml中是否存在“模式”

使用

//@mode

如果此 XPath 表达式选择一个节点,这意味着modeXML 文档中存在一个名为的属性。

或者你可以使用

boolean(//@mode)

这会产生一个布尔值——true()或者false()

于 2012-11-20T18:09:56.020 回答