我试图接收具有给定标签名称的所有元素,无论它们在哪里。
我在基本元素上使用了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>
答案 0 :(得分:1)
您的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)
{
....
}
答案 1 :(得分:1)
完成此操作的步骤:
获取像xp下的xElement下的元素中的所有后代元素
var descendants = rechnung.Descendants()
。
使用linq之类的所有具有“ LocalName” =“ Produkt”的后代
var getAllProdukt = descendants.ToList().Where(desc => desc.Name.LocalName == "Produkt").ToList();
这样,您将获得带有标签“ Produkt”的XElement列表