我有一个带动态内容的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);
}
感谢您的帮助
答案 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"));
}
谢谢你们帮助人们