0

如何将xml下面的所有“cc”属性值获取到字符串数组中

<DD a="1" b="2" c="3">
   <D aa="11" bb="22" cc="33"/>
   <D aa="11" bb="22" cc="33"/>
   <D aa="11" bb="22" cc="33"/>
</DD>  

我试过的案例:

foreach (XmlNode xD in DD) {
                        XmlElement getFDD = (XmlElement)DD;
                        for (int x = 0; x < DD.ChildNodes.Count; x++)
                        {
                            XmlElement XmlFV = (XmlElement)DD.ChildNodes[x];
                            stringArr[x] = XmlFV.GetAttribute("CC");                        
                        }
                    }

   for (int u = 0; u < DD.Count; u++)
                    {
                        getFDD = (XmlElement)DD[u].FirstChild;
                        XmlElement getFDD1 = (XmlElement)getFDD;
                        stringArr[u]=getFDD1.GetAttribute("cc");
}

我尝试使用 foreach 遍历每个节点,但我放弃了尝试。

4

3 回答 3

2

你可以用 LINQ2XML 做到这一点:

const string xml = @" 
    <DD a=""1"" b=""2"" c=""3"">
       <D aa=""11"" bb=""22"" cc=""33""/>
       <D aa=""11"" bb=""22"" cc=""33""/>
       <D aa=""11"" bb=""22"" cc=""33""/>
    </DD>";
var doc = XDocument.Parse(xml);
var res = doc.Element("DD")               // Get the root element DD
    .Elements("D")                        // Extract all sub-elements D
    .Select(e => e.Attribute("cc").Value) // Extract attribute cc
    .ToList();

以下是不使用 LINQ2XML 的方法:

XmlReader r = XmlReader.Create(new StringReader(xml));
IList<string> res = new List<string>();
while (r.Read()) {
    if (r.IsStartElement("D")) {
        res.Add(r.GetAttribute("cc"));
    }
}
于 2013-08-23T17:24:12.053 回答
2

这应该适用于.Net 2.0

var doc = new XmlDocument();
doc.Load(fname);

List<string> list = new List<string>();
foreach(XmlNode node in doc.GetElementsByTagName("D"))
{
    list.Add(node.Attributes["cc"].Value);
}
于 2013-08-23T17:33:09.803 回答
1

使用 Linq2Xml

XElement doc=XElement.Load(yourXmlPath);
String[] attr=doc.Elements("D")
                  .Select(x=>(String)x.Attribute("cc"))
                  .ToArray();
于 2013-08-23T17:24:07.700 回答