我试图剥离我的 XML 并只保留我需要的节点
输入 XML 是
<Employees>
<Employee>
<EmpId>1</EmpId>
<Name>Sam</Name>
<Sex>Male</Sex>
<Address>
<Country>USA</Country>
<Zip>95220</Zip>
</Address>
<Address2>
<Country>UK</Country>
<Zip>E157JQ</Zip>
</Address2>
</Employee>
<Employee>
<EmpId>2</EmpId>
<Name>Lucy</Name>
<Sex>Female</Sex>
<Address>
<Country>USA</Country>
<Zip>95220</Zip>
</Address>
<Address2>
<Country>UK</Country>
<Zip>E184JQ</Zip>
</Address2>
</Employee>
</Employees>
我的代码如下。
private void button1_Click(object sender, EventArgs e)
{
Stream s = openFileDialog1.OpenFile();
var xDoc = XDocument.Load(s);
string keep = "EmpId,Sex,Address,Zip,Address2,Country"; \\ I can change this format
string desStr = "Employee";
string[] strArr = keep.Split(',');
var nodesToDelete = xDoc.Root.Descendants(desStr)
.SelectMany(el => el.Descendants()
.Where(a => !strArr.Contains(a.Name.ToString())));
foreach (var node in nodesToDelete.ToList())
node.Remove();
richTextBox1.Text = xDoc.ToString();
}
我从上面得到的输出是
<Employees>
<Employee>
<EmpId>1</EmpId>
<Sex>Male</Sex>
<Address>
<Country>USA</Country>
<Zip>95220</Zip>
</Address>
<Address2>
<Country>UK</Country>
<Zip>E157JQ</Zip>
</Address2>
</Employee>
<Employee>
<EmpId>2</EmpId>
<Sex>Female</Sex>
<Address>
<Country>USA</Country>
<Zip>95220</Zip>
</Address>
<Address2>
<Country>UK</Country>
<Zip>E184JQ</Zip>
</Address2>
</Employee>
</Employees>
我需要的输出是
<Employees>
<Employee>
<EmpId>1</EmpId>
<Sex>Male</Sex>
<Address>
<Zip>95220</Zip>
</Address>
<Address2>
<Country>UK</Country>
</Address2>
</Employee>
<Employee>
<EmpId>2</EmpId>
<Sex>Female</Sex>
<Address>
<Zip>95220</Zip>
</Address>
<Address2>
<Country>UK</Country>
</Address2>
</Employee>
</Employees>
如何查询 Address\Zip 和 Address2\Country 我需要它是通用的(因此可以更改字符串保留),因此我无法对节点名称进行硬编码。
谢谢