2013-02-26 108 views
1

我有被定义为一个XML(Foo.xml)模板如下:如何填充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

这与linq和肥皂有什么关系? – Default 2013-02-27 12:36:32

+0

@门把手我不同意你的看法。阅读这样的东西时,我不会失去焦点。 – 2013-02-27 12:43:22

+1

@JensKloster [others do](http://meta.stackexchange.com/q/2950/147063“应该'嗨','谢谢',标语和致敬从帖子中删除?”) – Default 2013-02-27 12:51:56

回答

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(); 
+1

非常感谢您的建议,Machel。两者都很棒,第一个就是我正在寻找的东西。但是,语法有点偏离。你能否更新它以便编译? – 2013-02-27 15:00:13

+0

对不起,错过了=号和公开的括号。 – 2013-02-27 16:34:00