很难从我的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; }
}
答案 0 :(得分: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
是不正确的,因为它使用特定于文化的数字格式(例如在德国,它需要小数点逗号而不是小数点)。