c# - 代码隐藏中的 XPath/Grabbing 节点值

标签 c# asp.net xml repeater xmldatasource

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

我目前正在中继器中抓取一个远程 XML 文件 XMLDataSource , 和 DataFile属性在后面的代码中设置(我有 DataFile 根据 URI 参数动态更改,例如 ?cat=blah 等)。这工作得很好,不是问题。

在这个中继器中有一个 <asp:HyperLink> ,其 URL 也将在后面的代码中动态更改。

现在回答问题:

从后面的代码来看,如何判断XML节点是否为空,如果不为空,如何抓取节点的值?

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

希望比我更擅长 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
 }

最佳答案

对于那些可能对此也感兴趣的人,我找到了一个可以轻松检查和操作 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
    }
}

关于c# - 代码隐藏中的 XPath/Grabbing 节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13651583/

相关文章:

c# - C#中的if语句简化

c# - jQuery如何在删除属性之前检查属性是否存在

xml - XSLT 日期格式

c# - 从生成的位图图像创建视频 C#

c# - 在 DateTimePicker 中处理点击 Today

c# - 使用自定义 URL 重写器、IIS6 和带有 .htm、.html 等的 url

javascript - 在 vb.net 中获取确认值

asp.net - 使用 Asp.net 的 Paypal Mass Payment API(不接收来自 paypal 的响应)

xml - 使用 XML 格式化 Excel 内部单元格字体

android - 我如何使用单个 xml 布局文件在 android 中支持多种屏幕尺寸