Мне нужно отобразить данные (элементы XML документа и «вручную») из файла XML в элемент управления GridView в виде ссылки. Единственный способ, который работает для меня, - это использование раздела CDATA (я использовал его для элемента «документ» ниже). Но мне нужно найти способ избежать использования CDATA для упрощения XML-файла. Это должно позволить мне сделать ссылку в виде строки в коде за файлом и оставить только название документа в файле .xml. Я попробовал другой способ с «ручным» элементом (используя XmlNode). Но проблема в том, что он отображает одинаковые ссылки во всех ячейках GridView (потому что он берет «ручные» элементы из всего XML-документа), но он должен быть разным для каждой строки.
Пожалуйста, смотрите мой .xml
файл, .cs
файл и .aspx
страница ниже.
XML-файл:
<?xml version="1.0" encoding="utf-8" ?>
<document_topics>
<release id="936896294">
<topic>
<name>
Account Connect
</name>
<document>
<![CDATA[<a href="DocumentLocator.aspx?dn=AT100000&r=936896294">AT100000</a><br>
<a href="DocumentLocator.aspx?dn=AT100010&r=936896294">AT100010</a><br>
<a href="DocumentLocator.aspx?dn=AT100020&r=936896294">AT100020</a><br>
<a href="DocumentLocator.aspx?dn=AT100030&r=936896294">AT100030</a><br>
<a href="DocumentLocator.aspx?dn=AT100040&r=936896294">AT100040</a>]]>
</document>
<manual>
RR320000
</manual>
<project>
</project>
</topic>
<topic>
<name>
Bankruptcy Proof of Claim
</name>
<document>
<![CDATA[<a href="DocumentLocator.aspx?dn=PM400692&r=936896294">PM400692</a><br>
<a href="DocumentLocator.aspx?dn=RP1212001&r=936896294">RP1212001</a><br>
<a href="DocumentLocator.aspx?dn=RP1212002&r=936896294">RP1212002</a><br>
<a href="DocumentLocator.aspx?dn=SP027POCF&r=936896294">SP027POCF</a><br>
<a href="DocumentLocator.aspx?dn=SP027POCL&r=936896294">SP027POCL</a><br>]]>
</document>
<manual>
TR320010
</manual>
<manual>
TR320020
</manual>
<project>
PD55588
</project>
<project>
PD23459
</project>
</topic>
</release>
</document_topics>
`
.aspx (часть с кодом GridView):
<asp:GridView ID="gvDocumentTopics" SkinID="MainGrid" EmptyDataText="No Results" Width="100%" runat="server">
<Columns>
<asp:TemplateField ItemStyle-Width="25%" HeaderText="Topic">
<ItemTemplate>
<%# XPath("name").ToString() %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ItemStyle-Width="25%" HeaderText="Document Reference">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="" Text='<%# XPath("document").ToString() %>'></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ItemStyle-Width="25%" HeaderText="Manual Reference">
<ItemTemplate>
<%foreach (var link in links)
{%>
<%=link%><br />
<%}%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ItemStyle-Width="25%" HeaderText="Related Project">
<ItemTemplate>
<%# XPath("project").ToString() %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
Я использовал C # для чтения XML.
using Latitude.Web.Helpers;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
namespace Latitude.Web
{
public partial class Index : System.Web.UI.Page
{
public List<string> links = new List<string>();
public string link;
public string relId;
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["relId"] != null)
{
relId = ValidationHelper.ValidateReleaseIdString(Request.QueryString["relId"], ExceptionHelper.GetValidReleaseException(Request.QueryString["relId"]));
XmlDataSource1.DataFile = Server.MapPath("~/App_Data/IndexItems.xml");
XmlDataSource1.XPath = "document_topics/release[@id='" + relId + "']/topic";
XmlDataSource1.DataBind();
gvDocumentTopics.DataSource = XmlDataSource1;
gvDocumentTopics.DataBind();
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("~/App_Data/IndexItems.xml"));
XmlNodeList manualsXML = doc.SelectNodes("document_topics/release[@id='" + relId + "']/topic/manual");
foreach (XmlNode xNode in manualsXML)
{
string manual = xNode.InnerText;
if (!String.IsNullOrEmpty(manual))
{
string link = String.Format("<a href=\"DocumentLocator.aspx?dn={0}&r={1}\">{0}</a>", manual, relId);
links.Add(link);
}
}
}
}
}
}