【问题标题】:How do I take node and node's subnodes from XML file?如何从 XML 文件中获取节点和节点的子节点?
【发布时间】:2019-10-17 23:48:58
【问题描述】:

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

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

--> Test1,test1 info,variation1 条码

--> Test1,test1 info,variation2 条码

--> Test2,test2 info,variation1 条码

--> Test2,test2 info,variation2 条码

我该怎么做?请帮我。

我的 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'

【问题讨论】:

  • 有一个 XML Reader 和一个 XML Writer 类。它们对您不可用还是有一些问题?
  • 我可以得到主节点,但我不能得到子节点。我无法访问“变体”标签。变体标签是子节点的子节点。

标签: c# xml-parsing


【解决方案1】:

使用 XML Linq。请看下面我使用 Descendants 的代码。

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

【讨论】:

  • 是的,这是正确的方法,它非常有帮助。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多