Как импортировать Java List XML в C#

#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. Для нового вопроса создайте новый вопрос =)