如何从XML文件中获取节点和节点的子节点?

时间:2019-10-17 23:48:58

标签: c# xml-parsing

我想从XML文件中获取子节点,但是要有主节点,所以每个产品都有两个子节点。

我可以写文件->“产品名称”,“信息”,但是我需要写;

-> Test1,test1信息,variant1条形码

-> Test1,test1信息,variant2条码

-> Test2,test2信息,variant1条形码

-> Test2,test2信息,variant2条形码

我该怎么做?请帮我。

我的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'子节点的'product'和'barcode'子节点的'option'

1 个答案:

答案 0 :(得分:0)

使用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();
        }
    }
}