0

XML から属性を取得するのに苦労しています。この属性を取得し、送信して保存する必要があります。属性を身に着けることができません。:(属性の助けが必要です。

<portfolios>
  <portfolio>
    <id>00001</id>
    <investment ticker="ASD">
      <shares>20</shares>
      <price>42.50</price>
    </investment>
  </portfolio>

  <pricedata days="4">
    <stock ticker="ASD">
      <price value="42.50"/>
      <price value="43.50"/>
      <price value="39.00"/>
      <price value="45.00"/>
    </stock>
  </pricedata>
</portfolios>

私がこれまでに持っているもの!

public bool readXmlData(String filename)
{
    XDocument document = XDocument.Load(filename);

    foreach (XElement portfolio in document.Descendants("portfolio"))
        {
            XElement id = portfolio.Element("id");
            string id2 = id != null ? id.Value : string.Empty;
            portList.Add(new SmallPortfolio(id2));

            XAttribute ticker = portfolio.Attribute("investment");

            foreach(XElement investment in document.Descendants("investment"))
            {
                XElement shares = investment.Element("shares");
                XElement price =  investment.Element("price");

                temp.Add(new Investment(

                ticker != null ? ticker.Value : string.Empty,
                shares != null ? int.Parse(shares.Value) : default(int),
                price != null ? double.Parse(shares.Value) : default(double)
                ));
            }
        }

    foreach (XElement stock in document.Descendants("pricedata"))
    {
        XAttribute tick = stock.Attribute("stock");
        List<Double> pricetemp2 = new List<Double>();
        foreach (XElement price in document.Descendants("stock"))
        {
            XAttribute value = price.Attribute("price");
            pricetemp2.Add(value.Value);
        }
        groupList.Add(new PriceGroup(tick,pricetemp2));
    }
    return true;
}
public List<SmallPortfolio> getPortfolioList() { return null; }
public List<PriceGroup> getPriceList() { return null; }
}
4

1 に答える 1

1

<price>は要素ですが、属性であるかのようにアクセスしています<stock price="..."/>

これを試して:

foreach (XElement stock in document.Descendants("stock"))
{
    string ticker = (string)stock.Attribute("ticker");
    List<Double> pricetemp2 = new List<Double>();
    foreach (XElement price in stock.Descendants("price"))
    {
        double value = (double)price.Attribute("value");
        pricetemp2.Add(value);
    }
    groupList.Add(new PriceGroup(ticker, pricetemp2));
}

にキャストXAttributeするdoubleと、数値 ( ) に適切な XML 規則が使用されますXmlConvert.ToDouble。文化固有の数値書式を使用するため、使用double.Parseは正しくありません (たとえば、ドイツでは、小数点の代わりに小数点のカンマが必要です)。

于 2013-03-29T01:16:40.057 に答える