这是我的XML文件通常的样子。它可以包含任意数量的分配和任意数量的模块,并且可以包含3个级别。 (我现在还没有包括其他两个级别。)
<course name="engineering">
<level4>
<module name="electric" credit="22">
<assignment name="wer" marks="22" weight="50">
</assignment>
<assignment name="asd" marks="50" weight="50">
</assignment>
</module>
</level4>
</course>
这是我到目前为止所拥有的
while (tr.Read())
{
tr.MoveToElement();
if (tr.Name == "Course") {
courseXML.Name = tr.GetAttribute("name");
}
if (tr.Name == "Level4") {
}
}
我正在阅读XML文件,但我偶然发现了一个问题。如何获取模块元素和赋值元素以及如何遍历它们,因为我的XML文件可以包含任意数量的模块和赋值。
答案 0 :(得分:1)
如果xml不大,你可以这样做:
public static List<XmlObject> FindTagsWithChildTags(string xml, string tag,string childTag,string attribute)
{
XDocument xdoc = XDocument.Load(xml);
if (xdoc.Descendants(tag).Any())
{
var lv1s = (from lv1 in xdoc.Descendants(tag)
select new XmlObject
{
Element = "",
Value = lv1.Attribute(attribute).Value.ToLower(),
Field = attribute ,
XmlObjects = (from lv2 in lv1.Descendants(childTag)
select new XmlObject
{
Element="",
Field=lv1.FirstAttribute.Name.LocalName,
Value = lv1.FirstAttribute.Value.ToLower()
}).ToList()
}).ToList();
return lv1s;
}
return new List<XmlObject>();
}
如果你有一个非常大的xml,你可以像这样阅读它
List<Info> infos = new List<Info>();
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
// settings.Schemas.Add("urn:empl-hire", "hireDate.xsd");
using (System.Xml.XmlReader reader = System.Xml.XmlReader.Create(xmlPath, settings))
{
reader.MoveToContent();
while(reader.ReadToFollowing("ServiceInformation"))
{
string serviceId = reader.GetAttribute("serviceId");
string serviceUrl = "";
if (reader.ReadToDescendant("ServiceURL"))
{
serviceUrl = reader.ReadElementContentAsString();
}
Info info = new Info();
info.ID = serviceId;
info.Value1 = serviceUrl;
infos.Add(info);
}
}
return infos;
这些是我用过的例子,希望他们帮助你!