c#如何在silverlight中的xml中动态地知道根节点和子节点名称

时间:2014-05-15 13:46:03

标签: c# xml silverlight xml-parsing linq-to-xml

我将xml存储在一个字符串中,如下所示:

String xmlString =
<A>
  <B>
     <C>C1</C>
     <D>D1</D>  
  </B>
  <Separator>S1</Separator>
  <B>
     <C>C2</C>
     <D>D2</D>
  </B> 
</A>

我想知道c#代码中每个子节点名称的名称。

我的意思是我不会有xml代码,它会随机出现给我,所以我不知道什么是xml结构,我想知道所有子节点名称,如A,B,Cand D这里。

我的意思是我希望从head / Parent(在lmy xml中)开始并在最后(我的意思是在我的xml中)结束并逐个打印所有节点,如A,B,C,D,Separator, then again B ,C,D

我试过的是这个:

         IEnumerable<XElement> de = from el in xmlstring.Descendants() select el;
         foreach (XElement el in de)
         {
             Debug.WriteLine(el.Name);
         }

但它给出了错误:

Error   1   The type 'char' cannot be used as type parameter 'T' in the generic type or method 'System.Xml.Linq.Extensions.Descendants<T>(System.Collections.Generic.IEnumerable<T>)'. There is no boxing conversion from 'char' to 'System.Xml.Linq.XContainer'.   
Error   2   Could not find an implementation of the query pattern for source type 'System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>'.  'Select' not found.  Are you missing a reference or a using directive for 'System.Linq'? 

错误对应于xmlstring.Descendants(),Visual Studio为红色下划线。

我有以下参考资料:(我认为我已经需要像Linq,xml等参考):

enter image description here 注意:我在Silverlight工作,我必须用c#编写这段代码。

谢谢你们的帮助。

1 个答案:

答案 0 :(得分:1)

我无法评论,所以我要在这里写一下:System.Xml.Linq就是你需要的 XmlDocument.Descendants,而不是System.Linq

Get All node name in xml in silverlight

^这就是你要找的东西。 我使用了这段代码,它打印出的节点名称就好了。

    string xml = "<A><B><C>C1</C><D>D1</D></B><Separator>S1</Separator><B><C>C2</C><D>D2</D></B></A>";
    XDocument doc = XDocument.Parse(xml);
    foreach (XElement child in doc.Root.DescendantsAndSelf())
    {
        Console.WriteLine(child.Name.LocalName);
    }