2017-04-13 34 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

你還沒說什麼是錯的。推測問題是這些值是字符串,而你的屬性是'double'的 - 所以我建議將'XAttribute'或'XElement'轉換爲'double'而不是使用自定義轉換,而不是使用'Value'財產......但你應該真的編輯代碼來啓動錯誤。還要注意,你說你「遇到困難」的代碼不會出現在更完整的代碼中 - 你正在調用片段中的Count()'屬性,但不是在方法本身中...請發佈一個[mcve]讓它更容易幫助你。 –

+0

我將件和重量更改爲字符串。這有助於消除錯誤。我需要的是能夠拉動PIECE_WGT的所有實例的FILE_NO選擇 舉例:如果用戶選擇FILE_NO 2150510371,我需要能夠返回PIECE_WGT CTN = 1,PIECE_WGT = 2,PIECE_WGT = 3 –

+0

待辦事項你想計算總重量和總數? –

回答

0

不知道這是否是正確的方式,但它是t他的方式我設法得到它的工作

我轉換飲片和重量的列表,這樣我可以把所有PIECE_WGT屬性和元素爲每個文件編號

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; } 


}