1

現在、ホームページでフィルターを使用しており、ドロップダウンからカテゴリを選択し、検索を押すとクライアントの名前とロゴが表示されます。

次のリンクで説明されているチュートリアルを使用しました。

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.";
}
} 
4

2 に答える 2

1

""'>"である必要があります"'>"。そのため、例外が発生します。これは有効な文字列ではありません。

より一般的には、URIとコンテンツを別々のアイテムとして送信するか(URIを属性自体として)、または<a>コンテンツ内の要素を直接許可するようにXMLを定義することをお勧めします。XMLまたはHTMLをエスケープしてXMLに入れることはできますが、そのXMLをエスケープしてXMLに入れると、厄介になる可能性があります。

于 2012-09-03T10:57:04.477 に答える
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>

少し調整するだけで、XMLのロゴからすべての'![CDATA[<'を削除できるようになります。

于 2012-09-04T08:53:08.347 に答える