使用XML文件绑定下拉列表

时间:2010-11-30 17:49:28

标签: c# .net asp.net xml

我有这个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#中的特定下拉列表?

由于

3 个答案:

答案 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 */
 }
}