【问题标题】:How do I populate child elements in XML?如何在 XML 中填充子元素?
【发布时间】:2013-02-12 14:42:25
【问题描述】:

我有一个定义如下的 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。

【问题讨论】:

  • 这与 linq 和 soap 有什么关系?
  • @Doorknob 我不同意你的看法。阅读这样的内容时,我不会失去注意力。
  • @JensKloster others do
  • @JensKloster 但是,在这个社区中,它通常不受欢迎。
  • @Default 我猜这里的人很容易分心 :) 我不知道是否已经对是否礼貌进行了投票。让我们不要在评论中进一步讨论这个问题——如果你觉得有需要,我愿意和你聊天。

标签: c# xml linq soap xml-parsing


【解决方案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();

【讨论】:

  • 非常感谢您的建议,马歇尔。两者都很棒,第一个确实是我想要的。但是,语法有点偏离。你能更新它以便编译吗?
  • 抱歉,错过了 = 符号和左括号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多