Xml属性为字符串数组

时间:2013-08-23 17:15:03

标签: c# xml-parsing

如何将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循环遍历每个节点,我放弃了尝试。

3 个答案:

答案 0 :(得分: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"));
    }
}

答案 1 :(得分: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);
}

答案 2 :(得分:1)

使用Linq2Xml

XElement doc=XElement.Load(yourXmlPath);
String[] attr=doc.Elements("D")
                  .Select(x=>(String)x.Attribute("cc"))
                  .ToArray();