我是ASP.NET新手(PHP程序员已经8年了),所以如果我的术语不正确,请原谅我。
我目前正在转发器XMLDataSource
中抓取一个远程XML文件,后面的代码中设置了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
}
答案 0 :(得分: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
}
}