C# 将xml转换为密钥对值
我有一个无法解决的问题,需要一个新的见解。我需要以下XML结构才能成为密钥对值 XML 我需要实现的是,在一个密钥对值中,我迷失了 谢谢C# 将xml转换为密钥对值,c#,xml,C#,Xml,我有一个无法解决的问题,需要一个新的见解。我需要以下XML结构才能成为密钥对值 XML 我需要实现的是,在一个密钥对值中,我迷失了 谢谢 *更新的xml抱歉我个人会创建一个页面实体列表并反序列化它: [XmlRoot(name="page"] public class MyPage { [XmlElement(name="titel")] public string Title { get; set; } [XmlElement(name="url")] publ
*更新的xml抱歉我个人会创建一个页面实体列表并反序列化它:
[XmlRoot(name="page"]
public class MyPage
{
[XmlElement(name="titel")]
public string Title { get; set; }
[XmlElement(name="url")]
public string Url { get; set; }
}
然后反序列化为:
List<MyPage> pages;
您的XML无效。你可以查一下
假设这是一个输入错误,并且您有以下格式的有效XML
<?xml version="1.0" encoding="utf-8"?>
<data>
<page>
<titel>link 3</titel>
<url>http://data.home.nl/link/link/link3.aspx</url>
</page>
<page>
<titel>Test 4</titel>
<url>http://data.home.nl/link/link/test4.aspx</url>
</page>
</data>
然后,您可以使用LINQtoXML查询它并执行任何您想要的操作
Dictionary<string, string> dictionary = new Dictionary<string, string>();
var path = Server.MapPath("~/Content/pairs.xml");
XElement elm = XElement.Load(path);
//you can also load the XML from a stream /Textreader etc..
if (elm != null)
{
foreach (var page in elm.Elements("page"))
{
var title = page.Element("titel").Value;
var url = page.Element("url").Value;
dictionary.Add(title, url);
}
}
//dictionary is filled now
我相信您将添加正确的错误处理,在访问元素以应用某些方法或读取属性值之前,始终包括空检查,正如Shyju已经指出的,您的XML格式不好。我还假设您的意思是元素是title而不是titel?我在回答中使用了titel,因为这是XML字符串中的内容 我相信您可以通过以下方式实现您的目标: 编辑 我看到你编辑了你的问题,页面实际上是分层的。要处理此问题,可以创建LINQ扩展方法来处理递归:
public static IEnumerable<T> Recursive<T>(
this IEnumerable<T> source,
Func<T, IEnumerable<T>> recursiveFunc)
{
foreach (T item in source)
{
yield return item;
var result = recursiveFunc(item);
if (result != null)
{
foreach (T nextItem in Recursive(result, recursiveFunc))
{
yield return nextItem;
}
}
}
}
然后按如下方式创建词典:
var myDictionary = xml.Elements()
.Recursive(e => e.Elements())
.Where(e => e.Element("title") != null && e.Element("url") != null)
.Select(e => new KeyValuePair<string, string>(
e.Element("title").Value,
e.Element("url").Value))
.ToDictionary(k => k.Key, v=> v.Value);
您的xml是递归形式的 如果需要存储父子关系,请使用嵌套类而不是dictionary类
public class Page
{
public string Title { get; set; }
public string Url { get; set; }
public List<Page> childPage {get; set;}
}
XML似乎已损坏。您是否有要反序列化的类?您的XML示例中嵌套的元素不正确,并且根元素未关闭。可能存在重复的
var myDictionary = xml.Elements()
.Recursive(e => e.Elements())
.Where(e => e.Element("title") != null && e.Element("url") != null)
.Select(e => new KeyValuePair<string, string>(
e.Element("title").Value,
e.Element("url").Value))
.ToDictionary(k => k.Key, v=> v.Value);
public class Page
{
public string Title { get; set; }
public string Url { get; set; }
public List<Page> childPage {get; set;}
}