我有这个XML文件:
<questions>
<question id="title">
<option>
<text>Mr</text>
<value>Mr</value>
</option>
<option>
<text>Ms</text>
<value>Ms</value>
</option>
</question>
<question id="organisation">
<option>
<text>org1</text>
<value>org1</value>
</option>
<option>
<text>org2</text>
<value>org2</value>
</option>
</question>
</questions>
如何将每个问题绑定到c#中的特定下拉列表?
由于
答案 0 :(得分:2)
您可以使用XmlDataSource。因为您的XML不符合此控件所期望的,所以您需要使用XSL转换来调整它。
所以第1步:
定义XSL转换(~/App_Data/questions.xslt
):
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="questions">
<questions>
<xsl:apply-templates select="question"/>
</questions>
</xsl:template>
<xsl:template match="option">
<option>
<xsl:attribute name="text">
<xsl:value-of select="text"/>
</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="value"/>
</xsl:attribute>
</option>
</xsl:template>
</xsl:stylesheet>
第2步:
使用它:
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="Form1" runat="server">
<asp:DropDownList
ID="ddl"
runat="server"
DataSourceID="ds"
DataTextField="text"
DataValueField="value"
/>
<asp:XmlDataSource
ID="ds"
runat="server"
DataFile="~/App_Data/questions.xml"
TransformFile="~/App_Data/questions.xslt"
XPath="//option"
/>
</form>
</body>
</html>
注意数据源上的TransformFile
属性是如何指向XSL文件的。
答案 1 :(得分:0)
您可以使用XmlDataSource类将XML数据绑定到控件。
答案 2 :(得分:0)
您可以使用XDocument
string xml = ""; /* your xml */
XDocument xDocument = XDocument.Parse(xml);
foreach(XElement questionElement in xDocument.Root.Elements("question"))
{
foreach(XElement optionElement in questionElement.Elements("option"))
{
string text = optionElement.Element("text").Value;
string value = optionElement.Element("value").Value;
/* do something with them here */
}
}
使用属性id绑定所有选择框:
string xml = ""; /* your xml */
XDocument xDocument = XDocument.Parse(xml);
foreach(XElement questionElement in xDocument.Root.Elements("question"))
{
string id = questionElement.Attribute("id").Value;
foreach(XElement optionElement in questionElement.Elements("option"))
{
string text = optionElement.Element("text").Value;
string value = optionElement.Element("value").Value;
/* bind selectbox options here, using id,text,value */
}
}
使用id绑定一个选择框:
string id = "title";
string xml = ""; /* your xml */
XDocument xDocument = XDocument.Parse(xml);
XElement questionElement = xDocument.Root.Elements("question").SingleOrDefault(e => e.Attribute("id").Value == "title");
if (questionElement != null)
{
foreach(XElement optionElement in questionElement.Elements("option"))
{
string text = optionElement.Element("text").Value;
string value = optionElement.Element("value").Value;
/* bind selectbox options here, using id,text,value */
}
}