【问题标题】:XPath / Grabbing node value in code behindXPath / 在后面的代码中抓取节点值
【发布时间】:2012-11-30 19:12:37
【问题描述】:

我是 ASP.NET 的新手(PHP 程序员 8 年),所以如果我的术语不正确,请原谅我。

我目前正在转发器XMLDataSource 中获取远程 XML 文件,并且在后面的代码中设置了 DataFile 属性(我有 DataFile 根据 URI 参数动态更改,例如 ?cat=blah ETC)。这很好用,不是问题。

在这个转发器中是一个<asp:HyperLink>,它的 URL 也将在后面的代码中动态更改。

现在问题来了:

从后面的代码来看,如何查看XML节点是否为空,如何获取非空节点的值?

我在这个问题上已经讨论了大约 3 天(搜索了几个小时),但是我就是想不出看起来应该如此简单的东西!这是我目前拥有的代码,但是对于具有CreateNavigator(); 的行后面的代码,我得到了Object reference not set to an instance of an object 的错误

希望比我更擅长 ASP.NET 和 C# 的人可以轻松发现问题或知道我可以完成此任务的方法吗?

代码

<asp:XmlDataSource ID="rssFeed" runat="server"></asp:XmlDataSource>
<asp:Repeater runat="server" DataSourceID="rssFeed" OnItemDataBound="Repeater_ItemDataBound">
        <ItemTemplate>
                <asp:HyperLink ID="articleURL" Text='<%#XPath("title")%>' runat="server" />
        </ItemTemplate>
</asp:Repeater>

C# 背后的代码

protected void Page_Load(object sender, EventArgs e)
{
        // rss variables
        var rssSource = "http://websiteurl.com/xmlfeed/";
        var rssPath = "rss/channel/item";
        var searchQueries = "?foo=bar";
        string currCat = Request.QueryString["cat"];
        string searchTerms = Request.QueryString["s"];

        // insert categories query
        if(currCat != null){
                searchQueries += "&cat=" + currCat;
        }

        // insert search query
        if(searchTerms != null){
                searchQueries += "&s=" + searchTerms;
        }

        // load RSS file
        rssFeed.DataFile = rssSource + searchQueries;
        rssFeed.XPath = rssPath;
}

protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
        XPathNavigator nav = ((IXPathNavigable)e.Item.DataItem).CreateNavigator();
        string hyperlinkURL = nav.SelectSingleNode("link").Value;
        // removed code here that changes URL to hyperlinkURL to shorten post
 }

【问题讨论】:

    标签: c# asp.net xml repeater xmldatasource


    【解决方案1】:

    对于那些可能对此感兴趣的人,我找到了一个可以轻松检查和操作 xml 项的解决方案。

    protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        // make sure we are not checking item in ItemHeader or ItemFooter to prevent null value
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
            string myVar = XPathBinder.Eval(e.Item.DataItem,"title").ToString();
    
            // utilize and manipulate myVar XML value here
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 2016-02-24
      相关资源
      最近更新 更多