给定一个 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 文档,您将如何填充属性和元素的路径列表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将 xml 值绑定为属性或元素

XML_03_XML文档类型定义DTD

当我们有多个同名但属性不同的元素时,如何使用 Xdocument 从 xml 中删除一个元素

如何搜索 xml 节点值,然后在 c# 中为该元素创建新属性

Dom解析xml,只是简单的解析出有效元素的元素名,元素值,属性名和属性值

如何填充作为另一个文档的数组元素的子文档的字段?