2017-04-13 8 views
0

私が抱えている問題は、XMLファイルを読み込んで複数のPIECE_WGTを取得することです。私は以下XMLからのLinqを使用した集計倍数

Pieces = el.Element("PIECE_WGT").Attribute("CNT").Value, 
Weight = el.Element("PIECE_WGT").Value 

以下

以内にトラブルを抱えていますのはここ属性だけでなく、要素の値

が引くしたい私のすべてのコードの下

class FILELOGElements 
{ 
    public string FileNo { get; set; } 
    public string TotPieces { get; set; } 
    public string TotWeight { get; set; } 
    public string PiecesUsed { get; set; } 
    public double Pieces { get; set; } 
    public double Weight { get; set; } 
} 

private IEnumerable<FILELOGElements> FileInfo(XElement doc, string FileNo) 
{ 
    IEnumerable <FILELOGElements> Info = 
     from el in doc.Elements("FILE_NO") 
     where el.Attribute("ID").Value.ToUpper() == FileNo 
     select new FILELOGElements 
     { 
      FileNo = el.Attribute("ID").Value.ToUpper(), 
      TotPieces = el.Element("TOTAL_PIECES").Value.ToUpper(), 
      TotWeight = el.Element("TOTAL_WEIGHT").Value.ToUpper(), 
      PiecesUsed = el.Element("PIECES_USED").Value.ToUpper(), 
      Pieces = el.Element("PIECE_WGT").Attribute("CNT").Value, 
      Weight = el.Element("PIECE_WGT").Value 
     }; 

    return Info; 
} 

があるさXML文書の設定方法:

<INFO> 
    <FILE_NO ID="2150510370"> 
    <TOTAL_PIECES>2</TOTAL_PIECES> 
    <TOTAL_WEIGHT>500</TOTAL_WEIGHT> 
    <PIECES_USED>2</PIECES_USED> 
    <PIECE_WGT CNT="1">100</PIECE_WGT> 
    <PIECE_WGT CNT="2">125</PIECE_WGT> 
    </FILE_NO> 
    <FILE_NO ID="2150510371"> 
    <TOTAL_PIECES>10</TOTAL_PIECES> 
    <TOTAL_WEIGHT>1000</TOTAL_WEIGHT> 
    <PIECES_USED>3</PIECES_USED> 
    <PIECE_WGT CNT="1">100</PIECE_WGT> 
    <PIECE_WGT CNT="2">125</PIECE_WGT> 
    <PIECE_WGT CNT="3">275</PIECE_WGT> 
    </FILE_NO> 
</INFO> 
+1

あなたは間違っているものを言っていないため、すべてのPIECE_WGT属性と要素を引っ張ることができるように、それは私がリストに小品やウェイトの変換

仕事を得ることができました。おそらく問題は値が文字列で、プロパティが 'double'なので、' Value 'を使うのではなく、 'XAttribute'や' XElement'を 'double'にキャストしてカスタム変換を使うことをお勧めします。プロパティ...しかし、あなたは本当にエラーを開始するコードを編集する必要があります。また、あなたが "問題を抱えている"と言うコードはより完全なコードでは表示されないことに注意してください - スニペットで 'Count()'プロパティを呼び出していますが、メソッド自体ではありません... [mcve]を使うと、あなたを助けやすくなります。 –

+0

ピースとウェイトをストリングに変更しました。それが間違っているのを助けました。私が必要とするのは、選択したFILE_NOのPIECE_WGTのすべてのインスタンスを引き出すことです。 例:ユーザーがFILE_NO 2150510371を選択した場合、PIECE_WGT CTN = 1、PIECE_WGT = 2、PIECE_WGT = 3を返す必要があります。 –

+0

Do合計重量と合計数を計算したいですか? –

答えて

0

これが正しい方法かどうかはわかりませんが彼は道私は、各ファイル番号

private IEnumerable<FILELOGElements> FileInfo(XElement doc, string FileNo) 
    { 

     IEnumerable <FILELOGElements> Info = from el in doc.Elements("FILE_NO") 
              where el.Attribute("ID").Value.ToUpper() == FileNo 
              select new FILELOGElements 
              { 
               FileNo = el.Attribute("ID").Value.ToUpper(), 
               TotPieces = Convert.ToDouble(el.Element("TOTAL_PIECES").Value), 
               TotWeight = Convert.ToDouble(el.Element("TOTAL_WEIGHT").Value), 
               PiecesUsed = Convert.ToDouble(el.Element("PIECES_USED").Value), 
               Pieces = el.Elements("PIECE_WGT").Attributes("CNT").Select(a => Convert.ToDouble(a.Value)).ToList(), 
               Weight = el.Elements("PIECE_WGT").Select(a => Convert.ToDouble(a.Value)).ToList() 
              }; 



     return Info; 
    } 

} 

class FILELOGElements 
{ 
    public string FileNo { get; set; } 
    public double TotPieces { get; set; } 
    public double TotWeight { get; set; } 
    public double PiecesUsed { get; set; } 
    public List<double> Pieces { get; set; } 
    public List<double> Weight { get; set; } 


} 
関連する問題