2013-01-10 17 views
0

請忽略此問題。問題出在數據進入方法,而不是我在問題中寫的任何代碼/ xml。我會刪除這個問題,但它已經有了答案。我的xpath評估器和我的代碼似乎得到不同的結果

我有一些XML,我測試了一個XPath查詢,並得到了預期的結果,但我的代碼似乎無法達到相同的結果。

這裏是XML

<custom-table security="seeown" allownotify="false"> 
    <reports show="all"> 
    <report aspurl="../Reports/" label="Buy Sheet" security="moderator"/> 
    </reports> 
    <select-field name="StatusQ3MAP" eval="false"> 
    <option value="Accept" label="Accept"/> 
    <option value="Decline" label="Decline"/> 
    </select-field> 
    <select-field name="MerchantStatus" eval="false"> 
    <option value="Review 1" label="Review 1"/> 
    <option value="Review 2" label="Review 2"/> 
    </select-field> 
</custom-table> 

我的XPath看起來像custom-table/select-field[@name="StatusQ3MAP"]這讓我適當的選擇-field元素在XML的片段。

然而,我的方法,沒有出現工作是:

public static List<string> GetListItems(string fieldName, XPathNavigator nav) 
{ 
    var list = new List<string>(); 

    var nodes = nav.Select(string.Format("/custom-table/select-field[@name = '{0}']", fieldName)); 

    foreach (XPathNavigator item in nodes) 
     list.Add(item.Value); 

    return list; 
} 

假設字段名是「StatusQ3MAP」似乎有什麼也沒有的節點,因此沒有得到返回結果列表。

我在做什麼錯?

+0

嘗試將'string.Format(「/ custom-table/select-field [@name ='{0}']」,fieldName)'改爲'custom-table/select-field [@name ='「 + fieldName +「'」「' – JWiley

+0

@JWiley,我剛剛嘗試了這個,並得到了同樣的結果 –

+0

@JWiley,以消除這方面的任何歧義我試圖硬編碼的xpath查詢就像我的問題和我的問題仍然失敗 –

回答

0

XPathNavigator.Select預計XPathExpression。更改您的代碼

XPathExpression expr = nav.Compile(string.Format("custom-table/select-field[@name= '{0}']",fieldName)); 
XPathNodeIterator iter = nav.Select(expr); 
while(iter.MoveNext()) 
{ 
    list.Add(iter.Current); 
} 
+0

Intellisense說我可以做一個xpath字符串,但我試過你的主意,它不起作用,結果是一樣的 –

+0

請嘗試我的編輯,是的,你是正確的,它將與字符串一起工作 – prthrokz

0

試試這個:

XPathNodeIterator nodes = nav.Select(string.Format("/custom-table/select-field[@name = '{0}']", fieldName)); 

foreach (XPathIterator item in nodes) 
     list.Add(item.Value); 

退房this link,它可以清除的東西了你。

+0

我改變了類型爲'var'並且改變了行讀取'list.Add(item.ToString())'來查看會發生什麼。節點似乎沒有任何東西可以迭代,list.Add永遠不會被打中。我是gues唱歌必須有我通過的XPathNavigator出現問題。 –

相關問題