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

本文关键字:XML 动态 提取 对象 要在 | 更新日期: 2023-09-27 18:33:04

我有一个包含动态内容的 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);
        }

感谢您的帮助

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

谢谢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"));
        }

谢谢你们的帮助

你可以使用 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 包含 与指定的 XName 匹配的 XContainer。