我目前在我的主页上使用过滤器,允许您从下拉菜单中选择一个类别,然后通过点击搜索显示客户端名称和徽标。
我使用了以下链接中解释的教程:
http://www.dbtutorials.com/retrieve/linq-to-xml-cs.aspx
目前我手动输入XML中的超链接,如下所示:
<ClientName><![CDATA[<a href='category-list.aspx?cat=exampleclient'>Example Client</a>]]></ClientName>
这确实显示了链接,但认为它有点乱。
我更喜欢它,所以看起来像:
<ClientName>Example Client</ClientName>
在c#中,我试图使超链接工作,但它还没有完全奏效。这是在编辑之前获取XML信息:
litXMLData.Text = litXMLData.Text + person.ClientLogo + "<br />";
litXMLData.Text = litXMLData.Text + person.ClientName;
当我尝试更新它时:
litXMLData.Text = "<a href='category-list.aspx?cat=" + litXMLData.Text + person.ClientName + ""'>" + person.ClientName + "</a>";
它出现以下错误:
CS1010:常量中的换行符
所以我有点卡住......有什么想法吗?
以下是所有C#代码,如果它在我上面的更新之前有所帮助:
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Xml;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
loadDDL();
}
protected void loadDDL()
{
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("XML/homepage-results.xml"));
XmlNodeList nodeList = doc.SelectNodes("Persons/Person");
//Below code modified by Chris so duplicated categories are not displayed ;
foreach(XmlNode node in nodeList)
{
ListItem newItem = new ListItem(node.SelectSingleNode("category").InnerText);
if (!ddlcategory.Items.Contains(newItem))
{
ddlcategory.Items.Add(newItem);
}
}
}
//End of modification ;
protected void butGetXML_Click(object sender, EventArgs e)
{
XDocument xmlDoc = XDocument.Load(Server.MapPath("XML/homepage-results.xml"));
var persons = from person in xmlDoc.Descendants("Person")
select new
{
ClientLogo = person.Element("ClientLogo").Value,
category = person.Element("category").Value,
ClientName = person.Element("ClientName").Value,
};
litXMLData.Text = "";
foreach (var person in persons)
{
litXMLData.Text = litXMLData.Text + "" + person.ClientLogo + "<br />";
//Removed category name displaying on the screen - litXMLData.Text = litXMLData.Text + "Category: " + person.category + "<br />";
litXMLData.Text = litXMLData.Text + "" + person.ClientName + "<br /><br />";
}
if (litXMLData.Text == "")
litXMLData.Text = "No Results.";
}
protected void butFilterXML_Click(object sender, EventArgs e)
{
XDocument xmlDoc = XDocument.Load(Server.MapPath("XML/homepage-results.xml"));
var persons = from person in xmlDoc.Descendants("Person")
where person.Element("category").Value == ddlcategory.SelectedItem.ToString()
select new
{
ClientLogo = person.Element("ClientLogo").Value,
category = person.Element("category").Value,
ClientName = person.Element("ClientName").Value,
};
litXMLData.Text = "";
foreach (var person in persons)
{
litXMLData.Text = litXMLData.Text + person.ClientLogo + "<br />";
litXMLData.Text = litXMLData.Text + person.ClientName + "<br /><br />";
}
if (litXMLData.Text == "")
litXMLData.Text = "No Results.";
}
}
答案 0 :(得分:1)
""'>"
应为"'>"
。这就是你得到异常的原因,它不是一个有效的字符串。
更一般地说,我倾向于将uri和内容作为单独的项目(uri作为属性本身)发送,或者定义XML以直接在内容中允许<a>
元素。将XML或HTML转换为XML工作,但如果您最终将XML转换为某些XML,那么可能会导致肮脏,然后将其转移到...
答案 1 :(得分:0)
经过一些修改后,我现在输入以下字符串格式:
所以来自:
litXMLData.Text = litXMLData.Text + person.ClientLogo + "<br />";
litXMLData.Text = litXMLData.Text + person.ClientName;
为:
foreach (var person in persons)
{
topRow = string.Format(@"{0} <td>{1}</td>", topRow, person.ClientLogo);
bottomRow = string.Format(@"{0} <td><img src='images/arrow.jpg' align='texttop'><a href='category-list.aspx?cat={2}'>{1}</a></td>", bottomRow, person.ClientName, person.CategoryLink);
}
topRow = string.Format(@"{0} </tr>", topRow);
bottomRow = string.Format(@"{0} </tr>", bottomRow);
litXMLData.Text = string.Format(@"{0}{1}", topRow, bottomRow);
if (litXMLData.Text == "")
litXMLData.Text = "No Results.";
}
}
现在XML现在可以是:
<Person>
<ClientLogo><![CDATA[<img src='images/clients/client.jpg'>]]></ClientLogo>
<ClientName>Client Example</ClientName>
<category>Support</category>
<CategoryLink>client-categories</CategoryLink>
</Person>
通过一点点的推文,我将能够删除所有'![CDATA [&lt;'来自XML中的徽标