如果属性包含XML中的特定字符串,如何跳过?
问题描述:
我得到所有的XML数据作为我的C#代码中的子节点,但我想跳过如果任何节点以“MARK”开头。只有没有“MARK”属性的节点才能被处理。请帮忙。如果属性包含XML中的特定字符串,如何跳过?
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();
}
}
}
答
您可以申请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)
希望这可能有所帮助。
+0
谢谢Alex。 –
+0
不客气。祝你好运。 –
答
只需将条件添加到您的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>
你是不是应该开始'doc.SelectNodes( “AWE.ini /通知”)'代替'doc.SelectNodes(“AWE的.ini/MARK“)'? – grek40
是的。谢谢。你是对的。这只是一个示例代码。所以只是作为例子写的。 –