我有一个列表框控件,其中包含由“=”符号分隔的键值对。
例子:
热=冷
快=慢
高=低
蓝色=红色
我还有一个按钮,允许用户以 XML 格式导出此列表。我怎么能轻易做到呢?
如何对 XML 文件进行分类,它应该采用什么格式?
我有一个列表框控件,其中包含由“=”符号分隔的键值对。
例子:
热=冷
快=慢
高=低
蓝色=红色
我还有一个按钮,允许用户以 XML 格式导出此列表。我怎么能轻易做到呢?
如何对 XML 文件进行分类,它应该采用什么格式?
您可以使用 LINQ:
var xml = new XElement("Items",
from s in strings
let parts = s.Split('=')
select new XElement("Item",
new XAttribute("Key", parts[0]),
parts[1]
)
);
您可以使用 LINQ 将项目导出到 XML,如下所示:
<asp:ListBox ID="listBox" runat="server">
<asp:ListItem Text="Joe" Value="1" />
<asp:ListItem Text="Jay" value="2" />
<asp:ListItem Text="Jim" Value="3" Selected="true" />
<asp:ListItem Text="Jen" Value="4" />
</asp:ListBox>
编辑:用使用 LINQ to XML 的方法替换旧方法。
public XDocument ParseListBoxToXml()
{
//build an xml document from the data in the listbox
XDocument lstDoc = new XDocument(
new XElement("listBox",
new XAttribute("selectedValue", listBox.SelectedValue ?? String.Empty), new XAttribute("selectedIndex", listBox.SelectedIndex), new XAttribute("itemCount", listBox.Items.Count),
new XElement("items",
from ListItem item in listBox.Items
select new XElement("item", new XAttribute("text", item.Text), new XAttribute("value", item.Value), new XAttribute("selected", item.Selected))
)
)
);
//return the xml document
return lstDoc;
}
这是上述方法的 XML 输出:
<listBox selectedValue="3" selectedIndex="2" itemCount="4">
<items>
<item Text="Joe" Value="1" Selected="false" />
<item Text="Jay" Value="2" Selected="false" />
<item Text="Jim" Value="3" Selected="true" />
<item Text="Jen" Value="4" Selected="false" />
</items>
</listBox>
看看这个关于如何编写 XML 文件的教程。
或者XElement
按照 SLaks 的建议使用并使用其 Save() 方法来获取 Xml-File/-Data。您也可以使用该方法将其直接写入响应流。
这是另一种选择。
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = (" ");
string fileName = @"C:\Temp\myXmlfile.xml";
using (XmlWriter writer = XmlWriter.Create(fileName, settings))
{
writer.WriteStartElement("items");
for (int i = 0; i < listBox1.Items.Count; i++)
{
writer.WriteStartElement("item");
string Key = listBox1.Items[i].ToString().Split('=')[0];
string Value = listBox1.Items[i].ToString().Split('=')[1];
writer.WriteElementString("key", Key);
writer.WriteElementString("value", Value);
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.Flush();
}