我是 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/