我在我的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();
}
}
}
答案 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)
希望这可能会有所帮助。