Tôi rất mới phân tích cú pháp XML và tôi bắt đầu tìm hiểu về LINQ mà tôi nghĩ có thể là giải pháp tốt nhất ở đây. Tôi chủ yếu quan tâm đến hiệu suất như các ứng dụng tôi đang tạo ra sẽ đọc giá chứng khoán, mà đôi khi có thể thay đổi rất nhanh chóng. tôi nhận được sau thông điệp từ máy chủ:Cách nhanh nhất/hiệu quả nhất để đọc XML này từ điển (LINQ hoặc cái gì khác?)
<?xml version="1.0" encoding="utf-16"?>
<events>
<header>
<seq>0</seq>
</header>
<body>
<orderBookStatus>
<id>100093</id>
<status>Opened</status>
</orderBookStatus>
<orderBook>
<instrumentId>100093</instrumentId>
<bids>
<pricePoint>
<price>1357.1</price>
<quantity>20</quantity>
</pricePoint>
<pricePoint>
<price>1357.0</price>
<quantity>20</quantity>
</pricePoint>
<pricePoint>
<price>1356.9</price>
<quantity>71</quantity>
</pricePoint>
<pricePoint>
<price>1356.8</price>
<quantity>20</quantity>
</pricePoint>
</bids>
<offers>
<pricePoint>
<price>1357.7</price>
<quantity>51</quantity>
</pricePoint>
<pricePoint>
<price>1357.9</price>
<quantity>20</quantity>
</pricePoint>
<pricePoint>
<price>1358.0</price>
<quantity>20</quantity>
</pricePoint>
<pricePoint>
<price>1358.1</price>
<quantity>20</quantity>
</pricePoint>
<pricePoint>
<price>1358.2</price>
<quantity>20</quantity>
</pricePoint>
</offers>
<lastMarketClosePrice>
<price>1356.8</price>
<timestamp>2011-05-03T20:00:00</timestamp>
</lastMarketClosePrice>
<dailyHighestTradedPrice />
<dailyLowestTradedPrice />
<valuationBidPrice>1357.1</valuationBidPrice>
<valuationAskPrice>1357.7</valuationAskPrice>
<lastTradedPrice>1328.1</lastTradedPrice>
<exchangeTimestamp>1304501070802</exchangeTimestamp>
</orderBook>
</body>
</events>
Mục đích của tôi là để phân tích các yếu tố mức giá
<pricePoint>
<price>1358.2</price>
<quantity>20</quantity>
</pricePoint>
vào từ điển của cấu trúc sau:
Dictionary<double, PriceLevel>
nơi giá phải là một double và PriceLevel là một lớp
class PriceLevel
{
int bid;
int offer;
public PriceLevel(int b, int o)
{
bid = b;
offer = o;
}
}
Tùy thuộc vào yếu tố, trong đó mỗi điểm giá (hoặc giá thầu hoặc phiếu mua hàng) được chỉ định tương ứng, ví dụ: nếu giá giá tồn tại trong giá thầu, thì số lượng sẽ được chỉ định cho giá thầu và 0 để cung cấp. Ngược lại, nếu điểm giá tồn tại trong phiếu mua hàng, thì số lượng sẽ được chỉ định cho phiếu mua hàng và 0 để đặt giá thầu.
Tôi hy vọng lời giải thích của tôi là rõ ràng, tuy nhiên nếu bạn có bất kỳ vấn đề nào hiểu được, vui lòng không ngần ngại yêu cầu làm rõ trong nhận xét. Tôi sẽ đánh giá rất cao sự giúp đỡ trong việc giải quyết vấn đề này.
+++++++++++++++++++++++++++++++++++++++++ Cập nhật:
Tôi đã đi sâu hơn vào luồng mà tôi đang cố đọc, và nó sẽ không đơn giản như tôi mong đợi. Tôi phát hiện ra rằng luồng sẽ không luôn chứa toàn bộ tài liệu, do đó tôi sẽ phải đọc nó bằng cách sử dụng XmlReader để xử lý luồng liên tục. Trong trường hợp này, làm cách nào tôi có thể đọc giá thầu và phiếu mua hàng? Tôi có nội dung như sau:
StreamReader sr = new StreamReader (".. \ .. \ videos.xml");
XmlReader xmlReader = XmlReader.Create(sr);
while (xmlReader.Read())
{
if (xmlReader.HasValue)
{
OnXmlValue(this, new MessageEventArgs(true, xmlReader.Value));//saxContentHandler.Content(xmlReader.Value);
}
else
{
if (xmlReader.IsEmptyElement)
{
OnStartElement(this, new MessageEventArgs(false, xmlReader.Name));
OnEndElement(this, new MessageEventArgs(false, xmlReader.Name));
}
else if (xmlReader.IsStartElement())
{
OnStartElement(this, new MessageEventArgs(false, xmlReader.Name));
}
else
{
OnEndElement(this, new MessageEventArgs(false, xmlReader.Name));
}
}
}
nhưng tôi đang cố gắng liên kết tên phần tử với giá trị ... nghĩa là làm cách nào để biết giá giá thầu nào tôi hiện đang đọc và nếu điều này tồn tại trong giá thầu hoặc phiếu mua hàng? Cảm ơn bạn đã trợ giúp
độ chính xác tối đa của điểm giá của bạn là bao nhiêu? bạn có tất cả chúng ở 1 chữ số thập phân, với 4 chữ số trước dp, trong ví dụ của bạn. Có phải đó là cách nó sẽ được cho tất cả các điểm giá của bạn? –
Tốc độ nhanh nhất có thể là bao nhiêu? Giây, mili giây, micro giây? – Ishtar
Tôi nghĩ rằng, độ chính xác tối đa 6 điểm thập phân là đủ. về tốc độ và hiệu suất, sẽ có rất nhiều thông báo tương tự mỗi giây vì vậy tôi đang nói miliseconds ít nhất;) – Macin