2013-02-26 103 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