这可能是相当的菜鸟,但我遇到的问题最简单。这是我的xml:
<CustomFieldOptions>
<DataType>Text</DataType>
<Options>
<Option Key="Advokater">category_advokater</Option>
<Option Key="Arkitektur- & ingeniørvirksomheder">category_arkitektur</Option>
<Option Key="Bank & finans">category_bank</Option>
</Options>
我正在尝试将节点值和键属性添加到列表中,例如:
using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
{
while(reader.Read())
{
reader.ReadToFollowing("Option");
key = reader.ReadInnerXml();
reader.MoveToFirstAttribute();
value = reader.Value;
if(key.Length > 0 && value.Length > 0)
categoryList.Add(key, value);
}
}
所以,对于第一个选项,我应该得到一个键值对&lt;“category_advokater”,“Advokater”&gt;
但是当添加到列表时,我有当前/前一行的混合值。我哪里出错?
提前谢谢!/ snedker
答案 0 :(得分:1)
Reader速度更快,允许您部分处理xml文件。
请尝试使用此代码段。 ReadInnerXml将读指针前进到下一个元素。如果你没有跳过while语句中的下一个读取,你最终会无意中跳过一个元素。
using (XmlReader reader = XmlReader.Create(new StringReader(text))) {
bool skipRead = false;
while (skipRead || reader.Read()) {
skipRead = false;
if (reader.NodeType == XmlNodeType.Element && reader.Name == "Option") {
string key = reader.GetAttribute("Key");
string value = reader.ReadInnerXml();
skipRead = true;
Console.WriteLine("{0}.{1}", key, value);
}
}
答案 1 :(得分:0)
您可以使用LINQ to XML
:
var xmlDocument = XDocument.Load("path");
var options = xmlDocument.Descendants("Option")
.ToDictionary(x => (string)x, x => (string)x.Attribute("Key"));