如何在XML中填充子元素

本文关键字:填充 元素 XML | 更新日期: 2023-09-27 18:01:22

我有一个xml (Foo.xml)模板定义如下:

<Parent:Request xmlns:user="http://xxx.com/">
<Parent:ElemA></Parent:ElemA>
<Parent:ChildNode>
    <ElemB></ElemB>
    <ElemC></ElemC>
</Parent:ChildNode>
<Parent:ParentName></Parent:ParentName>
</Parent:Request>

在我的代码中,我能够按照如下方式设置xmltemplate中的父元素:

public void FooA( MyDomainObject DoM)
{
    private readonly XNamespace myNS = "http://ANameSpace.com/";
    XElement fooRequestDoc = XElement.Load("Templates/Foo.xml");
    XElement ElemA_El = fooRequestDoc.Descendants(myNS + "ElemA").FirstOrDefault();
    ElemA_El.SetValue(DoM.ElemA); 
}

在本例中,如果ElemA的值为"ElementA",则ElemA_El参数将被设置为该值。

我的问题是,如何设置特定的Child Note元素,如ElemB或ElemC?

我已经尝试使用"元素"(因为我理解它是用来检索子元素)如下:

XElement ElemB_El = fooRequestDoc.Element(myNS + "ChildNode");

但是它返回的是整个数据块而不仅仅是我要找的ElemB

如何在XML中填充子元素

如果您知道标签的名称,您可以这样做:

XElement ElemB_El = (from node in fooRequestDoc.Descendants() where node.Name == myNS + "ElemB" select node).FirstOrDefault();

如果你不知道标签的名字,你可以取ChildNode的每个后代,像这样:

var nodes = (from node in fooRequestDoc.Descendants(myNS + "ChildNode").Elements() select node).ToList();