2013-07-28 163 views
0

我有一个字符串XML,我想将其转换为实际的XML,并获取其值。从XML文件中提取数据

我的(字符串)XML文档看起来像这样:

<Folder> 
    <Files> 
     <File Id="123" 
     Size="111" 
     Name="abc"/> 
    </Files> 
</Folder> 

这是我在做什么:

在这里,我xml变量(XmlDocument的)有我的XML:< Folder>< Files>等等......在“InnerXml”属性中。
xnList(XmlNodeList)在其“InnerXml”属性下有< File Id="123" Size="111" Name="abc"/>
xn XmlNode和xnList完全一样,所以不存在xn["File Id"]这样的东西。

如何从XML文件获取信息?

+1

您的XML无效。不允许将Id =“123”作为元素 – rene

+0

这不是任何有效的XML。我怀疑你是否可以称为可以被称为XmlNodeList(对于任何XML标签)。一个XML标签将总是有一些名字。这不仅仅是属性。 – Prash

+0

这是一个例子..我改变,如果“fileid” – user990635

回答

0

这不是真的清楚你想要做什么,但我会建议使用LINQ to XML - 它会让事情变得更简单:

var doc = XDocument.Parse(stringXML); 
// Or doc.Root.Element("Files").Elements("File") 
foreach (var file in doc.Descendants("File")) 
{ 
    int id = (int) file.Attribute("Id"); 
    int size = (int) file.Attribute("Size"); 
    string name = (string) file.Attribute("Name"); 
    // Do whatever you need... 
} 

或者,如果你只是想收集到的信息:

var doc = XDocument.Parse(stringXML); 
var query = doc.Descendants("File").Select(file => new { 
           Id = (int) file.Attribute("Id"), 
           Size = (int) file.Attribute("Size"), 
           Name = (string) file.Attribute("Name") 
          }); 
0

这是正确的做法:

 var stringXML = "<Folder><Files><File Id=\"123\" Size=\"111\" Name=\"abc\"/></Files></Folder> "; 
     XmlDocument xml = new XmlDocument(); 
     xml.LoadXml(stringXML); 

     XmlNodeList xnList = xml.SelectNodes("/Folder/Files"); 
     foreach (XmlNode xn in xnList) 
     { 
      string a = xn["File"].Attributes["Id"].Value; 
     } 
0

你不能直接的方式获取的属性值ID。您可以使用属性属性来获取该特定属性值。

XmlNodeList xnList = xml.SelectNodes("/Folder/Files"); 
    foreach (XmlNode xn in xnList) 
    { 
     string a = xn.Attributes["Id"].Value; // Modify likewise 
    }