使用linq将子节点排除在同名集合中



py tht xml,请注意,BBB存在两个节点级别。

<?xml version="1.0" encoding="utf-8"?>
<AAA>
  <BBB>
    <BBB>ONE</BBB>
    <CCC>1</CCC>
    <DDD>2</DDD>
    <EEE>3</EEE>
  </BBB>
  <BBB>
    <BBB>TWO</BBB>
    <CCC>4</CCC>
    <DDD>5</DDD>
    <EEE>6</EEE>
  </BBB>
  <BBB>
    <BBB>THREE</BBB>
    <CCC>7</CCC>
    <DDD>8</DDD>
    <EEE>9</EEE>
  </BBB>
</AAA>

我想得出顶级BBB的集合并将其提取到自己的文件中,并使用基于Inner BBB的文件名。

我的代码是:

XDocument xdoc = XDocument.Load(sourceFile);
var lv1s = from lv1 in xdoc.Descendants("AAA") select lv1;
var lv2s = from lv2 in xdoc.Descendants("BBB") select lv2;
foreach (var lv2 in lv2s)
{
  var name = lv2.Element("BBB").Value;
  lv2.Save(@"c:temp" + name + ".xml");
}

问题是,lvl2正在捡起父母和后代BBB。似乎找不到有效过滤后代的方法。

例如,我认为这是关键,但没有结果:

var lv2s = from lv2 in xdoc.Elements("BBB") select lv2;

希望您能为我提供解决问题的方法。

-------------------------编辑-------------------------

好吧,我看到我做错了什么。错字。

lvl2应该具有利用LVL1,因此:

var lv2s = from lv2 in lv1s.Elements("BBB") select lv2;   

也就

var parentBbbs =xdoc.Element("AAA").Elements("BBB");

您需要开始获取root元素,然后使用Elements方法选择Parent BBB:

var parentBbbs =xdoc.Element("AAA").Elements("BBB");

只有document.root.elements()应该工作。

基本上是后裔()递归,而元素()仅获得直接的孩子。

相关内容

  • 没有找到相关文章

最新更新