如果属性包含XML中的特定字符串,如何跳过?

时间:2017-10-13 03:30:32

标签: c# xml

我在我的c#代码中将所有XML数据作为子节点获取,但是如果任何节点以“MARK”开头,我想跳过。只应处理没有“MARK”作为属性的节点。请帮忙。

xml数据

<AWE.ini> 
  <NOTICES name="MARK_AB1-1">
    <Type>
      CD
    </Type>
  </NOTICES>
  <NOTICES name="CGX1_CF-1">
    <Type>
      DF
    </Type>
  </NOTICES>
  <NOTICES name="CGX2_CF-2">
    <Type>
      DG
    </Type>
  </NOTICES>
  <NOTICES name="MARK_AB2-1">
    <Type>
      HJ
    </Type>
  </NOTICES>
</AWE.ini>

csharp代码

XmlDocument doc = new XmlDocument();
doc.Load("..\\AWE.xml");
XmlNodeList xnList = doc.SelectNodes("AWE.ini/NOTICES");
foreach (XmlNode xn in xnList)
{
    if (xn.HasChildNodes)
    {     
        foreach (XmlNode item in xn.ChildNodes)
        {
            m1.Type = xn.ChildNodes[0].InnerText.ToString();
        }
    }
}

2 个答案:

答案 0 :(得分:2)

只需在XPath中添加条件,即检查name属性的值。

XmlNodeList xnList = doc.SelectNodes("AWE.ini/NOTICES[not(starts-with(@name, 'MARK'))]");

只返回这两个节点:

<NOTICES name="CGX1_CF-1">
  <Type>
    DF
  </Type>
</NOTICES>
<NOTICES name="CGX2_CF-2">
  <Type>
    DG
  </Type>
</NOTICES>

答案 1 :(得分:1)

您可以应用String.Contains()方法(请参阅; https://msdn.microsoft.com/en-us/library/dy85x1sa(v=vs.110).aspx

在您的情况下,条件语句将如下:

if (!m1.Type.Contains("MARK")) 
{
// your code
}

或者:

if (!xn.ChildNodes[0].InnerText.ToString().Contains("MARK")) 
{
// your code
}

此外,IndexOf()方法可用于检查string1是否包含string2。用法:if(string1.IndexOf(string2)>=0)

希望这可能会有所帮助。