我有一个奇怪的问题。我无法以任何方式修改我需要使用的XML(这导致我的问题)。我正在处理的XML采用以下形式:
<DocumentRoot>
<Parent>
<ClassAttribute> Value </ClassAttribute>
<ClassName> More Attributes </ClassName> <!--Can occur a varying number of times.-->
</Parent>
<Parent>
<ClassAttribute> Value </ClassAttribute>
<ClassName> More Attributes </ClassName>
<ClassName> More Attributes </ClassName>
</Parent>
</DocumentRoot>
我想要做的是提取此信息,并使用它来实例化自定义类CustomClassName,然后将其添加到List<CustomClassName>
,其中每个不同 {{1 XML文档中的元素(非值)用于创建以下形式的新CustomClassName:
<ClassName>
我希望我已经清楚地解释了我的愿望,如果没有,请戳我以获取更多信息。
是否可以这样做?
编辑:
每个“distinct”ClassName元素,我的意思是元素ClassName将在XML文档中出现多次,尽管我希望只有一个ClassName类可以用它的相关属性(ClassAttribute元素的值)实例化)和不同的ClassName元素的值被“附加”到实例化类中的属性的末尾。
答案 0 :(得分:0)
试试这个
from n in doc.Root.Elements("Parent") select
{
ClassName = n.Element("ClassName").First().Attribute("ATTRNAME").Value,
classAttributes = from a in n.Elements("ClassAttribute") select a.Value,
moreAttributes = from a in n.Elements("ClassName") select a.Value
}
答案 1 :(得分:0)
XElement root = XElement.Load(file); // or .Parse(string)
List<CustomClassName> list = root.Descendants("ClassName").Select(x =>
new CustomClassName()
{
ClassName = x.Name.LocalName, // is the name, not the value
classAttributes = x.Parent.Element("ClassAttribute").Value, // Value is a string, not a list, you'll have to do the conversion.
moreAttributes = x.Value // is the value, but Value is a string, not a list, you'll have to do the conversion.
})
.ToList();
这没有多大意义,为什么要将<ClassName>
元素的名称中的字符串“ClassName”分配给自定义类中的ClassName变量。但是没有更多的xml,它不可能比这更容易理解。
我希望无论如何这对你有所帮助。诀窍是Descendants("ClassName")
然后每个节点的Parent.Element("ClassAttribute")
获取其属性。