gpt4 book ai didi

c# - 将 XElement 手动解析为自定义对象的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 22:49:48 25 4
gpt4 key购买 nike

我有一个名为 content 的 XElement 变量,它由以下 XML 组成:

<content>
<title>Contact Data</title>
<p>This is a paragraph this will be displayed in front of the first form.</p>
<form idCode="contactData" query="limit 10; category=internal"/>
<form idCode="contactDataDetail" query="limit 10; category=internal">
<title>Contact Data Detail</title>
<description>This is the detail information</description>
</form>
</content>

我现在想简单地遍历每个 level-1 节点并将它们解析为对象。回到 C# 2.0,我使用 XmlReader 执行此操作,检查节点类型,并相应地解析它。

但是用 LINQ 解析 XML 节点的最佳方法是什么,我希望是这样的:

var contentItems = from contentItem in pageItem.content.DescendantNodes()
select new ContentItem
{
Type = contentItem.Element()
};

foreach (var contentItem in contentItems)
{
switch (contentItem.Type)
{
case "title":
...(parse title)...
case "p":
...(parse p)...
case "form":
...(parse form)...
}
}

哪里:

public class ContentItem
{
public string Type { get; set; }
public string IdCode { get; set; }
public XElement Content { get; set; }
}

最佳答案

它必须是 XElement 吗?我会(手动或通过 xsd.exe)只创建映射到元素/属性名称的类 - 并使用 XmlSerializer - 特别是通过 StringReader:

        Content content;
using(StringReader sr = new StringReader(xml))
using(XmlReader xr = XmlReader.Create(sr)) {
XmlSerializer ser = new XmlSerializer(typeof(Content));
content = (Content)ser.Deserialize(xr);
}

(编辑)

实体类:

[XmlRoot("content")]
public class Content {
[XmlElement("title")]
public string Title { get; set; }
[XmlElement("p")]
public string Description { get; set; }
[XmlElement("form")]
public List<ContentForm> Forms { get; set; }
}
public class ContentForm {
[XmlAttribute("idCode")]
public string Id { get; set; }
[XmlAttribute("query")]
public string Query { get; set; }
[XmlElement("title")]
public string Title { get; set; }
[XmlElement("description")]
public string Description { get; set; }
}

关于c# - 将 XElement 手动解析为自定义对象的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/949572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com