请忽略这个问题。问题是数据进入方法而不是我在问题中写的任何代码/ xml。我会删除这个问题,但它已经有了答案。
我有一些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"]
,它为我提供了XML中适当的select-field元素。
但是,我看来不起作用的方法是:
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;
}
假设fieldName为“StatusQ3MAP”,节点中似乎没有任何内容,因此列表中没有结果。
我做错了什么?
答案 0 :(得分: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);
}
答案 1 :(得分: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,它可能会为您解决问题。