C # XML-разбор отделяет innerxml от innertext - PullRequest
0 голосов
/ 03 января 2012

То, что я пытаюсь сделать, - это создать идеально вложенный список, в основном двумерный список или двумерный массив, если это лучше для этой задачи, это будет работать следующим образом ID => 1 Name => Hickory без явного выбора узла.

Я мог бы использовать SelectNode (Вудс / Вуд) и затем сделать что-то вроде node["ID"].InnerText, но для этого потребовалось бы знать, как называется узел.

Предположим, что это будет читать wood.xml, даже если вместо 7 будет 36 узлов, и что я никогда не узнаю имя узлов.Я попытался использовать outerxml / innerxml, но это дает мне слишком много информации.

 XmlDocument doc = new XmlDocument();
        doc.Load("wood.xml");

        //Here is wood.xml
        /*<Woods><Wood><ID>1</ID><Name>Hickory</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>2</ID><Name>Soft Maple</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>3</ID><Name>Red Oak</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood></Woods>*/


        XmlNode root = doc.FirstChild;

        //Display the contents of the child nodes.
        if (root.HasChildNodes)
        {
            for (int i=0; i<root.ChildNodes.Count; i++)
            {
                Console.WriteLine(root.ChildNodes[i].InnerXml);
                Console.WriteLine();
            }

            Console.ReadKey();
        }

Это позволило бы мне в принципе создать деревянный буфер " ", если хотите, яможно получить доступ к этим значениям в другом месте.

Извините, если мне было неясно, я хочу сделать это "абстракция" из-за отсутствия лучшего слова.

Так что если бы я когда-нибудь сменил имя«Weight» - «HowHeavy» или если бы я добавил дополнительный элемент «NumberOfBranches», мне не пришлось бы жестко задавать структуру XML-файла.

Ответы [ 2 ]

2 голосов
/ 03 января 2012

Это то, что вы после?

class Program
    {   
        static void Main(string[] args)
        {
          string xml = @"<Woods><Wood><ID>1</ID><Name>Hickory</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>2</ID><Name>Soft Maple</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>3</ID><Name>Red Oak</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood></Woods>";

           XDocument doc = XDocument.Parse(xml);
           //Get your wood nodes and values in a list 
           List<Tuple<string,string>> list = doc.Descendants().Select(a=> new Tuple<string,string>(a.Name.LocalName,a.Value)).ToList();

           // display the list
           list.All(a => { Console.WriteLine(string.Format("Node name {0} , Node Value {1}", a.Item1, a.Item2)); return true; });
           Console.Read();
        }
    }  
1 голос
/ 03 января 2012

Вы можете использовать xmlDocument.SelectNodes("//child::node()")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...