2015-10-06 54 views
1

XML文件双击我已经使用这个代码XMLWriter就创建了一个简单的XML文件:阅读包含的XMLReader

using (XmlWriter writer = XmlWriter.Create("c:\\temp\\data.xml")) 
{ 

    writer.WriteStartElement("ScaleFactors"); 

    writer.WriteStartAttribute("CorrectionFactorX"); 
    writer.WriteValue(CorrectionFactorX); 
    writer.WriteEndAttribute(); 

    writer.WriteStartAttribute("CorrectionFactorY"); 
    writer.WriteValue(CorrectionFactorY); 
    writer.WriteEndAttribute(); 

    writer.WriteStartAttribute("CorrectionFactorZ"); 
    writer.WriteValue(CorrectionFactorZ); 
    writer.WriteEndAttribute(); 

    writer.WriteEndElement(); 

    writer.Flush(); 
} 

XML文件是这样的:

<?xml version="1.0" encoding="utf-8"?> 
    <ScaleFactors CorrectionFactorX="1" 
        CorrectionFactorY="1" 
        CorrectionFactorZ="1" /> 

(CorrectionFactorX/Y/Z是双打)现在我想用XMLReader读回它们,但失败了。我尝试MoveToAttribute/GetAttribute没有成功。任何提示和代码示例表示赞赏。

谢谢!

+0

是的。 Double .... – RobertK

回答

1

如果如果你在MSDN坚持使用的XmlReader,然后

void Main() 
     { 
      var xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><ScaleFactors CorrectionFactorX=\"1.31\" CorrectionFactorY=\"1\" CorrectionFactorZ=\"1\" />"; 
      using (var reader = XmlReader.Create(new StringReader(xml))) 
      { 
       while (reader.Read()) 
       { 
        if (reader.NodeType == XmlNodeType.Element) 
        { 
         Console.WriteLine(reader.Name); 
         var attc = reader.AttributeCount; 
         for (int i = 0; i < attc; i++) 
         { 
          Console.WriteLine(reader.GetAttribute(i)); 
         } 
        } 
       } 
      } 
     } 

(很好的例子,在处理XML的不同部分,但你更好,你可以使用然后XDOC

void Main() 
{ 
    var xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><ScaleFactors CorrectionFactorX=\"1.31\" CorrectionFactorY=\"1\" CorrectionFactorZ=\"1\" />"; 
    var xdoc = XDocument.Parse(xml); 

    var cfx = Double.Parse(xdoc.Element("ScaleFactors").Attribute("CorrectionFactorX").Value); 
    Console.WriteLine (cfx);  
} 

off with XDocument

+0

必须使用CultureInfo.InvariantCulture作为Double.Parse的第二个参数。否则,它会查找一个','作为小数点。除了它工作得很好,谢谢! – RobertK

+0

不要使用'Double.Parse()',使用['XmlConvert.ToDouble(string)'](https://msdn.microsoft.com/en-us/library/system.xml.xmlconvert.todouble%28v = vs.110%29.aspx)。它正确处理国际化。或者使用['XAttribute'](https://msdn.microsoft.com/en-us/library/bb338730%28v=vs.110%29.aspx)或['XElement'](https:/ /msdn.microsoft.com/en-us/library/bb303005%28v=vs.110%29.aspx)。 – dbc

+0

或者,更好的是,内置的显式转换使用'XmlConvert'。您可以简单地将'XAttribute'或'XElement'转换为'double'或'double?'。 –

0

using XmlDocument -

 var xml = new XmlDocument(); 
     xml.Load("xmlPath"); 

     var match = xml.DocumentElement.Attributes; 
     foreach (XmlAttribute item in match) 
     { 
      Console.WriteLine(item.Value); 
     }