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

これは常にfalseを返します..これを行う方法は...?

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

xmlに「モード」が存在するかどうかを確認したい

使用:

//@mode

この XPath 式がノードを選択する場合、これは指定された属性modeが XML ドキュメントに存在することを意味します。

または使用できます

boolean(//@mode)

そして、これはブール値を生成します-true()またはfalse()

于 2012-11-20T18:09:56.020 に答える
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 に答える