给定一个 Xml 文档,您将如何填充属性和元素的路径列表 [重复]
Posted
技术标签:
【中文标题】给定一个 Xml 文档,您将如何填充属性和元素的路径列表 [重复]【英文标题】:Given an Xml document, how would you populate a list of paths of attributes and elements [duplicate] 【发布时间】:2015-01-04 05:58:04 【问题描述】:给定以下 Xml:
<Student number='2020'>
<Subject>Comp</Subject>
<Credintials>
<Password>010101</Password>
<PasswordLength>6</PasswordLength>
<Contact>contact@example.com</Contact>
</Credintials>
<PersonalDetails age='30' height='2'/>
<Lecture age='30' height='2'>
<StudentName>Hakeem</StudentName>
</Lecture>
</Student>
我想打印以下列表:
Student.@number=2020
Student.Subject=Comp
Student.Credintials.Password=010101
Student.Credintials.PasswordLength=6
Student.Credintials.Contact=contact@example.com
Student.PersonalDetails.@age=30
Student.Lecture.@age=30
Student.PersonalDetails.@height=2
Student.Lecture.@height=2
Student.Lecture.StudentName=Hakeem
我基本上是在尝试为属性和元素获取这些路径,这些属性和元素的值等于 innerText,诸如 StudentName、Password、Subject 之类的元素。年龄、身高等属性
谢谢
【问题讨论】:
试过 Xml 序列化? 你有没有尝试过?你读过XML Serialization吗?您是否在 SO 上搜索过如何从给定的 XML 创建 XML 类? (Example answer) 我个人会使用 LINQ to XML...使用Descendants
获取所有元素,然后为该元素编写所有行。
扁平化层次结构?听起来很简单:解析 xml,递归遍历元素,为每个值和属性生成输出。
P.S. 'Credentials' 在整个代码中拼写错误。 :p
【参考方案1】:
这样的方法会打印出你期望的结果
var xml = @"<Student number='2020'>
<Subject>Comp</Subject>
<Credintials>
<Password>010101</Password>
<PasswordLength>6</PasswordLength>
<Contact>contact@example.com</Contact>
</Credintials>
<PersonalDetails age='30' height='2'/>
<Lecture age='30' height='2'>
<StudentName>Hakeem</StudentName>
</Lecture>
</Student>";
var xmlParsed = XElement.Parse(xml);
GetNodeDescendantsAndPrint(xmlParsed);
public void GetNodeDescendantsAndPrint(XElement node, string nameToAppend= null)
var name = string.IsNullOrEmpty(nameToAppend)
? node.Name.LocalName
: nameToAppend;
foreach (var att in node.Attributes())
Console.WriteLine(name + ".@" + att.Name.LocalName + "=" + att.Value);
var descendants = node.Elements();
if (descendants.Any())
foreach (var innerNode in descendants.OfType<XElement>())
GetNodeDescendantsAndPrint(innerNode,
name+"." + innerNode.Name.LocalName );
else
Console.WriteLine(name + "=" + node.Value);
【讨论】:
太棒了,谢谢!! 只是一些我认为我可以解决的小错误,但好主意,我喜欢它 是的,我可能会在一两个不应该打印的情况下打印出来,但至少您知道如何继续。 :)以上是关于给定一个 Xml 文档,您将如何填充属性和元素的路径列表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
当我们有多个同名但属性不同的元素时,如何使用 Xdocument 从 xml 中删除一个元素
如何搜索 xml 节点值,然后在 c# 中为该元素创建新属性