#c# #java #xml #list #collections
#c# #java #xml #Список #Коллекции
Вопрос:
У меня есть сгенерированный Java (коллекция списков) формат XML:
<java.util.Collections>
<org.yccheok.jstock.engine.Stock>
<code>
<code> RBS.L</code>
</code>
<symbol>
<symbol> ROYAL BK SCOTL GR</symbol>
</symbol>
<name> ROYAL BK SCOTL GR</name>
<board> London</board>
<industry> Unknown</industry>
<prevPrice> 23.74</prevPrice>
<openPrice> 23.41</openPrice>
<lastPrice> 24.4</lastPrice>
<highPrice> 24.855</highPrice>
<lowPrice> 23.0</lowPrice>
<volume> 51353968</volume>
<changePrice> 0.66</changePrice>
<changePricePercentage> 2.78</changePricePercentage>
<lastVolume> 795</lastVolume>
<buyPrice> 24.39</buyPrice>
<buyQuantity> 51203</buyQuantity>
<sellPrice> 24.4</sellPrice>
<sellQuantity> 370763</sellQuantity>
<secondBuyPrice> 0.0</secondBuyPrice>
<secondBuyQuantity> 0</secondBuyQuantity>
<secondSellPrice> 0.0</secondSellPrice>
<secondSellQuantity> 0</secondSellQuantity>
<thirdBuyPrice> 0.0</thirdBuyPrice>
<thirdBuyQuantity> 0</thirdBuyQuantity>
<thirdSellPrice> 0.0</thirdSellPrice>
<thirdSellQuantity> 0</thirdSellQuantity>
<calendar>
<time> 1319038099446</time>
<timezone> America/New_York</timezone>
</calendar>
</org.yccheok.jstock.engine.Stock>
</java.util.Collections>
Я пытаюсь извлечь значения тегов внутреннего тега кода и изменить значение параметра в C #. Я также пытаюсь предварительно заполнить таблицу данных этими значениями. Как мне также обрабатывать внутренний тег кода? Хотя я не эксперт, вот мой исходный код на C #
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Data;
namespace XMLParser
{
class Program
{
static void Main(string[] args)
{
DataTable table = new DataTable();
table.Columns.Add("code", typeof(string)); ;
table.Columns.Add("changePricePercentage", typeof(double));
// Create a new XmlDocument
XmlDocument doc = new XmlDocument();
// Load data
doc.Load(@"C:...realtimestock.xml");
// Set up namespace manager for XPath
// Get forecast with XPath
//XmlNodeList nodes = doc.SelectNodes("org.yccheok.jstock.engine.Stock", ns);
XmlNodeList nodes = doc.SelectNodes("org.yccheok.jstock.engine.Stock");
// You can also get elements based on their tag name and namespace,
// though this isn't recommended
//XmlNodeList nodes = doc.GetElementsByTagName("org.yccheok.jstock.engine.Stock");
// "http://xml.weather.yahoo.com/ns/rss/1.0");
foreach (XmlNode node in nodes)
{
// Console.WriteLine("{0}: {1}, {2}F - {3}F",
// node.Attributes["code"].InnerText,
// node.Attributes["changePricePercentage"].InnerText);
Console.WriteLine("1: {0} 2: {1}", node.Attributes["code"].InnerText,
node.Attributes["changePricePercentage"].InnerText);
table.Rows.Add(node.Attributes["code"].InnerText, node.Attributes["changePricePercentage"].InnerText);
Console.ReadKey();
}
}
}
}
Как мне получить свой код для выполнения этой задачи?
PS Этот редактор Stackoverflow не принял бы мой XML-код должным образом, поэтому мне пришлось редактировать с фактическими именами символов. Извините
Спасибо
Комментарии:
1. Где структура XML? :-S
2. Это грязно, но я не использую XSL, но он находится между блоками «lessthan» и «greaterthan». Этот редактор StackExchange не принял бы необработанный блок кода XML, в котором он жаловался на форматирование. Я даже отформатировал ожидаемое, поэтому приношу свои извинения.
3. @heavyrockerdude, вам просто нужно поставить четыре пробела перед каждой строкой, и все готово
Ответ №1:
Попробуйте это:
XmlNodeList nodes = doc.SelectNodes("//org.yccheok.jstock.engine.Stock");
foreach (XmlElement element in nodes)
{
Console.WriteLine("1: {0} 2: {1}",
element.SelectSingleNode("code").InnerText,
element.SelectSingleNode("changePricePercentage").InnerText);
}
Console.ReadKey();
Ваши code
changePricePercentage
узлы и являются элементами, а не атрибутами, это была ваша ошибка.
Комментарии:
1. Вау!! Это потрясающе. Спасибо, Рубенс. Следующий вопрос: как мне отсортировать таблицу по умолчанию? Я попробовал: таблица. DefaultView. Сортировка = «[» таблица. Столбцы [1]. Имя_колонки «] asc»;
2. Для нового вопроса создайте новый вопрос =)