我有一个XML文件,它有几个这样的标签:
<sitecollection name="">
<site name="">
<maingroup name="">
<group name=""> </group>
</maingroup>
</site>
<sitecollection>
我们的想法是循环遍历XML文档中的所有sitecollection
及其子元素,并将信息保存在变量中。我遇到的问题是保存子元素及其属性。
到目前为止,我有以下代码:
class xmlreader
{
public static void Main()
{
XDocument xdoc = XDocument.Load("xmldocument.xml");
var result = new System.Text.StringBuilder();
var lv1s = from lv1 in xdoc.Descendants("sitecollection")
select new
{
siecollection = lv1.Attribute("name").Value,
maingroup = lv1.Descendants("group")
};
foreach (var lv1 in lv1s)
{
result.AppendLine(lv1.siecollection);
foreach (var lv2 in lv1.maingroup)
result.AppendLine(" " + lv2.Attribute("name").Value);
}
}
}
答案 0 :(得分:1)
如果您提供的示例XML准确无误,则问题可能是您没有sitecollection的结束标记。
我尝试使用稍微不同的XML输入代码(关闭了sitecollection标记,并在name属性中添加了一些值,以便在结果StringBuilder中收集一些内容),如下所示:
XDocument xdoc = XDocument.Parse(@"<sitecollection name=""collectionName"">
<site name=""sitename"">
<maingroup name=""maingroupname"">
<group name=""groupname""> </group>
</maingroup>
</site>
</sitecollection>
");
和result.ToString()生成:“collectionName \ r \ ngroupname \ r \ n”
答案 1 :(得分:0)
请按照以下方式进行操作:
XmlReader reader = XmlReader.Create(@"C:\file.xml", null);
StringBuilder result = new StringBuilder();
while (reader.Read())
{
if( reader.NodeType == XmlNodeType.Element)
{
if (reader.HasAttributes)
{
result.AppendLine(reader.LocalName);
reader.MoveToFirstAttribute();
result.AppendLine(" " + reader.Value);
}
}
}