从字符串中读取数据XML

问题描述:

我的情况是这样的,我有一个字符串格式的xml数据。从字符串中读取数据XML

<?xml version="1.0" encoding="utf-16"?> 
<Tree AllowNodeEditing="True" ShowLineImages="False" CheckBoxes="True" EnableAjaxSkinRendering="False" AutoPostBackOnCheck="True" AutoPostBack="True"> 
<Node Text="IMG_1468.JPG" Value="../../CMS/Images/Fotogalerie/548/IMG_1468.JPG" Checked="True" Selected="True" tekst="Afbeelding IMG_1468.JPG" thumb="../../CMS/Images/Thumbs/548/IMG_1468.JPG" /> 

从上面的字符串我需要每个节点的选择“值”并将其存储在一个datatable.How我能实现这个..

+0

阿图尔请张贴有点大码等等我们可以理解你的字符串。 – 2012-04-26 10:42:42

使用Linq to XML

XDocument doc = XDocument.Parse(xml_string); 
var values = (from f in doc.Elements().Descendants() 
       select f.Attribute("Value").Value).ToArray(); 

的一种方式是将字符串转换为xmlDoc中,比你可以阅读xmlDoc中byusing LINQ:

字符串XML:

String rawXml = 
       @"<root> 
        <person firstname="Riley" lastname="Scott" /> 
        <person firstname="Thomas" lastname="Scott" /> 
       </root>"; 
     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.LoadXml(rawXml); 



var lv1s = from lv1 in xdoc.Descendants("person") 
      select new { 
       firstname = lv1.Attribute("firstname").Value, 
       lastname = lv1.Attribute("lastname").Value 
      }; 
+2

在.NET中可用于处理XML数据的许多选项中,XmlDocument远不是最好的选择。 – dtb 2012-04-26 10:44:46

+0

@dtb那么你有什么建议? – erikH 2012-04-26 10:46:58

+0

我建议[LINQ to XML](http://msdn.microsoft.com/en-us/library/bb387098.aspx),即[XDocument](http://msdn.microsoft.com/en-us /library/system.xml.linq.xdocument.aspx)。 – dtb 2012-04-26 10:52:15

XmlNodeList elementList = doc.GetElementsByTagName("*"); 
for (int i = 0; i < elementList.Count; i++) 
{ 
    string attrVal = elementList[i].Attributes["Value"].Value; 
} 

我会用XElement类。

XElement xmlTree = XElement.Parse("yourXMLString"); 

然后你就可以分析使用的XElement方法的每个元素,例如:

foreach (XElement el in xmlTree.Elements()) 
    // Do what you want with el 

你也可以查询它:

<Tree> 
    <Node Text="IMG_1468.JPG" Value="../../CMS/Images/Fotogalerie/548/IMG_1468.JPG" /> 
</Tree> 

string yourValue = xmlTree.Elements("Node") 
         .Where(x => (string) x.Attribute("Text") == "IMG_1468.JPG") 
         .Select(x => (string) x.Attribute("Value")) 
         .Single(); 

XDocument doc = XDocument.Parse(xml); 
var values = from element in doc.XPathSelectElements("/Tree/Node") 
        where element.Attribute("Value") != null 
        select (element.Attribute("Value").Value);