未找到嵌套的后代 Linq XElement



我正在尝试接收具有给定标签名称的所有元素,无论它们在哪里。 我在基本元素上使用了Descendants()方法,如下所示:

public static XElement GetModifiedDataSource(XElement rechnung, string parentElement, string newElementTag, string value = null)
{
foreach (var element in rechnung.Descendants(parentElement))
{
XElement newElement = new XElement(newElementTag);
if (value != null)
{
newElement.SetValue(value);
}
element.Add(newElement);
}
return rechnung;
}

对于string parentElement = "Produkt"的考试,我应该收到多个。 样本:

<Schlussrechnung xmlns="http://someurl">
<Parameter>
<Version></Version>
</Parameter>
<Uebersicht>
<Kopf>
<Rechnungsempfaenger>
</Rechnungsempfaenger>
</Kopf>
<Detail>
</Detail>
</Uebersicht>
<AbrechnungsDetail>
<Messpunkt>
<Produktgruppe>
<Produkt>
HERE
</Produkt>
<Produkt>
AND HERE
</Produkt>
</Produktgruppe>
</Messpunkt>
</Schlussrechnung>

完成此操作的步骤:

  1. 获取 rechnung XElement 下元素中的所有后代元素,例如

    var descendants = rechnung.Descendants().

  2. 使用 linq 获取所有具有 "LocalName" = "Produkt" 的后代,例如

    var getAllProdukt = descendants.ToList().Where(desc => desc.Name.LocalName == "Produkt").ToList();

通过这种方式,您可以获得带有"Produkt"标签的XElements列表

XML 具有目标元素从根元素继承的默认命名空间

xmlns="http://someurl"

您可以使用XNamespace和元素的本地名称的组合来引用命名空间中的元素:

// you can make `ns` as additional parameter of `GetModifiedDataSource`
XNamespace ns = "http://someurl"; 
foreach (var element in rechnung.Descendants(ns+parentElement))
{
....
}

或者,冒着从错误的命名空间获取元素(如果有(的风险,您可以通过仅查看元素的本地名称来忽略命名空间:

foreach (var element in rechnung.Descendants().Where(o => o.Name.LocalName == parentElement)
{
....
}

最新更新