2017-10-13 32 views
1

我得到所有的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(); 
     } 
    } 
} 
+0

你是不是應該開始'doc.SelectNodes( 「AWE.ini /通知」)'代替'doc.SelectNodes(「AWE的.ini/MARK「)'? – grek40

+0

是的。謝謝。你是對的。這只是一個示例代碼。所以只是作爲例子寫的。 –

回答

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)

希望這可能有所幫助。

+0

謝謝Alex。 –

+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> 
相關問題