2017-12-24 20 views
-3

このXMLファイルで4.247の "値Y"を抽出するのに手伝ってもらえますか?以前のスレッドを検索しましたが、この構造に適用できないようです。C#のXMLファイルから値を抽出する

<Chart1> 
    <Chart1_SeriesGroup_Collection> 
     <Chart1_SeriesGroup Label="MP_Trend_Data\MP_Prog/MP_DAILY_FLOW"> 
      <Chart1_CategoryGroup_Collection> 
       <Chart1_CategoryGroup Label="12/24/2017 1:58:19 AM"> 
        <Value X="0001-01-01T10:30:00+10:30"/> 
       </Chart1_CategoryGroup> 
       <Chart1_CategoryGroup Label="12/24/2017 1:58:19 AM"> 
        <Value X="0001-01-01T10:30:00+10:30"/> 
       </Chart1_CategoryGroup> 
       <Chart1_CategoryGroup Label="12/24/2017 1:59:19 AM"> 
        <Value X="0001-01-01T10:30:00+10:30"/> 
       </Chart1_CategoryGroup> 
       <Chart1_CategoryGroup Label="12/24/2017 1:59:19 AM"> 
        <Value X="0001-01-01T10:30:00+10:30"/> 
       </Chart1_CategoryGroup> 
       <Chart1_CategoryGroup Label="12/24/2017 1:58:19 AM"> 
        <Value Y="4.24700021743774" X="2017-12-24T12:28:19.333+10:30"/> 
       </Chart1_CategoryGroup> 

私が試したコード:

var xDoc = XDocument.Load("C:\\attachment\\Flow.xml"); 

     XmlDocument xml = new XmlDocument(); 
     xml.LoadXml(xDoc.ToString()); 

     XmlNodeList xnList = xml.SelectNodes("/Chart1/Chart1_SeriesGroup_Collection/Chart1_SeriesGroup[@Label='MP_Trend_Data\\MP_Prog/MP_DAILY_FLOW']"); 

     foreach (XmlNode Node in xnList) 
     { 
      XmlNodeList ynList = Node.SelectNodes("/Chart1_CategoryGroup_Collection/Chart1_CategoryGroup/Value"); 
      foreach (XmlNode Node2 in ynList) 
      { 
       textBox1.Text = Node2.Attributes["Y"].Value.ToString(); 
      } 
     } 
+2

あなたは何を試してみましたか?あなたのコード?エラー?私たちはあなたのためだけに書くことはできません! –

+1

これは無料のコーディングサービスではありません。コードがうまくいかないときは、自分で試して、質問をする必要があります。 [ask]をお読みください。 –

+0

私はこれを試しました: var node = xmlDocument.SelectSingleNode( "// * [@ label = 'MP_Trend_Data \\ MP_Prog/MP_DAILY_FLOW']"); ノードを抽出しようとしましたが、ヌル値を返しています – Chris

答えて

0
var xmlStr = @" 
    <Chart1> 
     <Chart1_SeriesGroup_Collection> 
      <Chart1_SeriesGroup Label='MP_Trend_Data\MP_Prog/MP_DAILY_FLOW'> 
       <Chart1_CategoryGroup_Collection> 
        <Chart1_CategoryGroup Label='12/24/2017 1:58:19 AM'> 
         <Value X='0001-01-01T10:30:00+10:30'/> 
        </Chart1_CategoryGroup> 
        <Chart1_CategoryGroup Label='12/24/2017 1:58:19 AM'> 
         <Value X='0001-01-01T10:30:00+10:30'/> 
        </Chart1_CategoryGroup> 
        <Chart1_CategoryGroup Label='12/24/2017 1:59:19 AM'> 
         <Value X='0001-01-01T10:30:00+10:30'/> 
        </Chart1_CategoryGroup> 
        <Chart1_CategoryGroup Label='12/24/2017 1:59:19 AM'> 
         <Value X='0001-01-01T10:30:00+10:30'/> 
        </Chart1_CategoryGroup> 
        <Chart1_CategoryGroup Label='12/24/2017 1:58:19 AM'> 
         <Value Y='4.24700021743774' X='2017-12-24T12:28:19.333+10:30'/> 
        </Chart1_CategoryGroup> 
       </Chart1_CategoryGroup_Collection>> 
      </Chart1_SeriesGroup> 
     </Chart1_SeriesGroup_Collection> 
    </Chart1>"; 

var xml = XElement.Parse(xmlStr); 
var firstY = xml.Descendants("Value").FirstOrDefault(v => v.Attribute("Y") != null); 
if (firstY != null) 
{ 
    var y = firstY.Attribute("Y").Value; 
} 
+0

ありがとうございました。上記のようにXMLファイルを文字列形式に変換するにはどうすればよいですか? – Chris

+0

@Chris -Pardon? – JohnyL

0

のXML LINQをお試しください:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      var results = doc.Descendants("Chart1_CategoryGroup").Where(x => x.Element("Value").Attribute("Y") != null).Select(x => new { 
       label = (DateTime)x.Attribute("Label"), 
       y = (double)x.Element("Value").Attribute("Y"), 
       x = (DateTime)x.Element("Value").Attribute("X") 
      }).ToList(); 
     } 
    } 
} 
関連する問題