我的xpath评估器和我的代码似乎得到了不同的结果

时间:2013-01-10 18:14:05

标签: c# xpath xpathnavigator

请忽略这个问题。问题是数据进入方法而不是我在问题中写的任何代码/ 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”,节点中似乎没有任何内容,因此列表中没有结果。

我做错了什么?

2 个答案:

答案 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,它可能会为您解决问题。