3

私はASP.NET(PHPプログラマーで8年)にかなり慣れていないので、用語が間違っている場合はご容赦ください。

現在、リピーターでリモートXMLファイルを取得してXMLDataSourceおり、DataFile属性はコードビハインドで設定されています(DataFile?cat = blahなどのURIパラメーターに基づいて動的に変更されます)。これは美しく機能し、問題はありません。

このリピーター内には、があり<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
 }
4

1 に答える 1

0

これにも興味があるかもしれない人のために、私は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
    }
}
于 2012-11-30T21:44:52.940 に答える