Как взять узел и подузлы узла из файла XML? - PullRequest
0 голосов
/ 18 октября 2019

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

Я могу записать в файл -> "название продукта", "информация", но мне нужнонаписать;

-> Test1, информация о test1, штрих-код вариации1

-> Test1, информация о test1, штрих-код вариации2

-> Test2, информация о test2, штрих-код вариации1

-> Test2, информация о test2, штрих-код вариации2

Как я могу это сделать? Пожалуйста, помогите мне.

Мой XML-файл:

-<Product>    
    -<ProductName>
              test1
    </ProductName>    
    -<Shortinfo>
         asd
    </Shortinfo>       
    -<info>
       asdasdasdasdasdasdasdasdasdasdasd
    </info>

  -<ProductOption>        
      -<Option>    
       <variationID>1</variationID>    
       <Barcode>71079901877542</Barcode>        
      </Option>    

       -<Option>    
        <variationID>2</variationID>    
        <Barcode>71079901877542</Barcode>        
       </Option>    
  -</ProductOption>
-</Product>


-<Product>    
    -<ProductName>
              test2
    </ProductName>    
    -<Shortinfo>
         asd
    </Shortinfo>  
    -<info>
       asdasdasdasdasdasdasdasdasdasdasd
    </info>   

  -<ProductOption>        
      -<Option>    
       <variationID>1</variationID>    
       <Barcode>71079901877542</Barcode>        
      </Option>  

       -<Option>    
        <variationID>2</variationID>    
        <Barcode>71079901877542</Barcode>        
       </Option>    
  -</ProductOption>
-</Product>

C #

 private static string EditText(XDocument xDocument) 
 {
    var stbu = new StringBuilder();

    foreach (var result in xDocument.Descendants("Product").Select(x => new
    {
        title = (string)x.Element("productName"),
        shortinfo = (string)x.Element("shortinfo"),
        info = (string)x.Element("info"),
        barkod=(string)x.Element("ProductOption").Element("Option").Element("Barcode")
    }))
    {
        stbu.AppendLine($"{result.barcode},{result.title},{result.shortinfo},{result.info}");
    };

    return stbu.ToString();
}

'option' подузел s 'product' и 'barcode' subnode s 'option'

1 Ответ

0 голосов
/ 18 октября 2019

Использовать XML Linq. Посмотрите на мой код ниже, где я использовал потомков.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            foreach (XElement product in doc.Descendants("Product"))
            {
                string productName = (string)product.Element("ProductName");
                string info = (string)product.Element("info");

                foreach (XElement option in product.Descendants("Option"))
                {
                    string variation = (string)option.Element("variationID");
                    string barcode = (string)option.Element("Barcode");

                    Console.WriteLine("Product Name : '{0}', Info : '{1}', variation : '{2}', barcode : '{3}'",
                        productName.Trim(), info.Trim(), variation.Trim(), barcode.Trim());
                }
            }
            Console.ReadLine();
        }
    }
}
...