我有一个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参数将设置为该值。
我的问题是,如何设置特定的儿童音符元素,例如ElemB或ElemC?
我尝试使用“元素”(因为我知道它用于检索子元素),如下所示:
XElement ElemB_El = fooRequestDoc.Element(myNS + "ChildNode");
但它正在返回整个区块,而不仅仅是我寻求的ElemB。
答案 0 :(得分:1)
如果你知道标签的名称,你可以这样做:
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();