要在C#对象中提取的XML动态内容

时间:2014-12-03 08:26:48

标签: c# xml parsing

我有一个带动态内容的xml源

<content base="path">
<folder name="Test_dossier1">
    <folder name="Test_dossier2">
        <folder name="Test_dossier3">
            <file name="test_fichier3.txt"/>
        </folder>
    <file name="test_fichier2.txt"/>
</folder>
<file name="test_fichier1.txt"/>
</folder>
<file name="adlcp_rootv1p2.xsd"/>
<file name="base64.js"/>
<file name="eniscormres.htm"/>
<file name="functions.js"/>
<file name="imscp_rootv1p1p2.xsd"/>
<file name="imsmanifest.xml"/>
</content>

因此文件夹节点是动态的。这可以有X个文件夹和文件节点子节点。 如何解析这个动态节点?

这是我提取文件节点的xml解析代码:

var files = content.SelectNodes ("file");
        foreach (System.Xml.XmlNode element in files) {
            var file = new OfflineGetCourseContentFile {
                Id = q.Id,
                File = element.Attributes.GetNamedItem ("name").Value
            };
            InsertSqliteDb.InsertIntoDB (file);
        }

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

您可以使用Linq to XML System.Xml.Linq.XDocument获取您想要的效果,因为 xml.Descendants(“file”)将返回每个文件节点你刚刚做了这样的事情:

// since st is an XMLDocument
var xml = XDocument.Parse(st.OuterXml);
    foreach (foreach (var file in xml.Descendants("file"))) 
    {
        var file = new OfflineGetCourseContentFile {
            Id = q.Id,
            File = file.Value
        };
        InsertSqliteDb.InsertIntoDB (file);
    }

XContainer.Descendants Method(XName)

  

返回此子元素的过滤集合   文档或元素,按文档顺序排列。只有拥有的元素   匹配的XName包含在集合中。

     

返回值类型:System.Collections.Generic.IEnumerable An   IEnumerable的XElement包含的后代元素   与指定的XName匹配的XContainer。

答案 1 :(得分:0)

感谢InvernoMuto,这是我在您的帮助下找到的解决方案

var inner = content.OuterXml;
        var xml = System.Xml.Linq.XDocument.Parse(inner);
        foreach (var fds in xml.Root.DescendantsAndSelf()) {
            Console.WriteLine (fds.Name.LocalName);
            if(fds.Name.LocalName != "content")
                Console.WriteLine ("Name {0}, Parent {1}", fds.Attribute("name").Value, fds.Parent.Attribute("name"));
        }

谢谢你们帮助人们