我正在尝试接收具有给定标签名称的所有元素,无论它们在哪里。 我在基本元素上使用了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>
完成此操作的步骤:
-
获取 rechnung XElement 下元素中的所有后代元素,例如
var descendants = rechnung.Descendants()
. -
使用 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)
{
....
}