我想从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'
答案 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();
}
}
}