2016-04-13 10 views
0

私は、次のXML構造を持っている:XMLノード名および属性は使用できません

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> 
<values> 
    <bool key="Chapter_1.Boolean1.value">true</bool> 
    <string key="Chapter_1.Text1.value">abc</string> 
    <string key="Chapter_1.Text2.value">Inspection done (2)</string> 
    <number key="Chapter_1.Number1.value">128</number> 
    <number key="Chapter_1.Number2.value">34539718</number> 
    <number key="Chapter_1.Number3.value">3</number> 
    <datetime key="Chapter_2.Chapter_2_1.DateTime1.value">2020-06-02T09:00:00+03:00</datetime> 
    <datetime key="Chapter_2.Chapter_2_1.DateTime2.value">2016-02-05T00:00:00+02:00</datetime> 
    <string key="Chapter_3.Text4.value">52</string> 
    <string key="Chapter_3.Text5.value">22</string> 
    <number key="Chapter_3.Number6.value">34539718</number> 
</values> 

と、次のC#コード:

var settings = new XmlReaderSettings(); 
settings.ConformanceLevel = ConformanceLevel.Auto; 
settings.IgnoreWhitespace = true; 
settings.IgnoreComments = true; 

using (var xmlReader = new XmlTextReader(xmlFilePath)) 
{ 
    while (xmlReader.Read()) 
    { 
     var nodeName = xmlReader.Name; 
     var attrName = xmlReader.GetAttribute("key"); 
    } 
} 

問題はノード名が空であるとがあるということです次のキーのための属性なし:

  • Chapter_1.Text1.value
  • Chapter_1.Number1.value
  • Chapter_3.Text5.value

誰もが問題になる可能性がどのような任意のアイデアを持っていますか?

答えて

1

コードはここでうまく働いた、私はすべてのXMLタグや属性にアクセスすることができました。

たぶんあなたはそれぞれxmlReader.Read()でタグの一部だけを読み込むので、混乱しているかもしれません。だから、キー「Chapter_1.Text1.value」と最初を全てのタグを読み取るためには、stringとキーでタグを読み込む「Chapter_1.Text1.value、それは、名前のない何かを読み込みますの値が "abc"であり、の名前がstringであるが、属性も値もないタグが読み取られます。

+0

これは問題でしたが、最終的に私の実装をXiaoy312(Xml to Linq)のソリューションに置き換えました。ご協力いただきありがとうございます。 – Sergiu

1

それはLINQのために、XMLを使用することが容易になるだろう:

var xml = XDocument.Load(__PATH_TO_XML__); 
var values = xml.XPathSelectElements("/values/*") 
    .Select(x => new 
    { 
     Type = x.Name, 
     Key = x.Attribute("key"), 
     Value = x.Value 
    }); 
+0

感謝をしてみてください。私はあなたのソリューションを使用して終了しました。より直感的で使いやすいと思われます。 – Sergiu

0

あなたにも値を読みたい場合は、あなたの助けのために、この

 using (var xmlReader = new XmlTextReader(@"yourxmlfile")) 
     { 
      while (xmlReader.Read()) 
      { 
       if (xmlReader.NodeType == XmlNodeType.Element) 
       { 

        var nodeName = xmlReader.Name; 
        var attrName = xmlReader.GetAttribute("key"); 

        Console.WriteLine(nodeName); 
        Console.WriteLine(attrName); 

       } 
       if (xmlReader.NodeType==XmlNodeType.Text) 
       { 
        Console.WriteLine(xmlReader.Value); 
       } 
      } 
     } 
関連する問題