C# 如何在XML中填充子元素?

C# 如何在XML中填充子元素?,c#,xml,linq,soap,xml-parsing,C#,Xml,Linq,Soap,Xml Parsing,我有一个xml(Foo.xml)模板,其定义如下: <Parent:Request xmlns:user="http://xxx.com/"> <Parent:ElemA></Parent:ElemA> <Parent:ChildNode> <ElemB></ElemB> <ElemC></ElemC> </Parent:ChildNode> <Parent:Pare

我有一个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>
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); 
}
XElement ElemB_El = fooRequestDoc.Element(myNS + "ChildNode");
在这种情况下,如果ElemA的值为“ElementA”,则ElemA_El参数将设置为该值

我的问题是,如何设置特定的子注释元素,例如ElemB或ElemC

我尝试使用“元素”(因为我知道它用于检索子元素),如下所示:

<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>
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); 
}
XElement ElemB_El = fooRequestDoc.Element(myNS + "ChildNode");

但是它返回的是整个块,而不是我搜索的ElemB。

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

XElement ElemB_El = (from node in fooRequestDoc.Descendants() where node.Name == myNS + "ElemB" select node).FirstOrDefault();
var nodes = (from node in fooRequestDoc.Descendants(myNS + "ChildNode").Elements() select node).ToList();
如果您不知道标记的名称,可以按如下方式获取ChildNode的每个后代:

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

如果您知道标签的名称,可以执行以下操作:

XElement ElemB_El = (from node in fooRequestDoc.Descendants() where node.Name == myNS + "ElemB" select node).FirstOrDefault();
var nodes = (from node in fooRequestDoc.Descendants(myNS + "ChildNode").Elements() select node).ToList();
如果您不知道标记的名称,可以按如下方式获取ChildNode的每个后代:

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

这和林肯和肥皂有什么关系?@Doorknob我不同意你的看法。阅读这样的东西时,我不会失去注意力。@JensKloster@JensKloster然而,在这个社区里,它通常是不受欢迎的。@Default我猜这里的人很容易分心:)我不知道是否有人投票决定是否礼貌。让我们不要再讨论这个问题了-如果你觉得有必要的话,我愿意和你聊天。这和linq和soap有什么关系?@Doorknob我不同意你的看法。阅读这样的东西时,我不会失去注意力。@JensKloster@JensKloster然而,在这个社区里,它通常是不受欢迎的。@Default我猜这里的人很容易分心:)我不知道是否有人投票决定是否礼貌。让我们不要在接下来的讨论中进一步讨论这个问题-如果你觉得有必要,我愿意和你聊天。非常感谢你的建议,马谢尔。两者都很好,第一个是我真正想要的。但是,语法有点错误。你能更新它以便编译吗?对不起,错过了=号和开括号。非常感谢你的建议,马谢尔。两者都很好,第一个是我真正想要的。但是,语法有点错误。请更新它以便编译好吗?对不起,错过了=号和开括号。