1

我有一个看起来像这样的 XML 文档:

<people>
  <person>
    <name>mike</name>
    <address>1 main st</address>
    <jobTitle>SE</jobTitme>
       <children>
           <name>mary</name>
           <age>5</age>
       </childres> 
  </person>
  <person>
    <name>john</name>
    <address>2 main st</address>
    <jobTitle>SE</jobTitme>
  </person>
</people>`

所以不是所有的人块和孩子块。很简单。当我通过 C# 向 XML 添加一个新人时,我正在编写一个函数,该函数接受一个人对象并且该人对象具有一组子对象(可能是 0 个或更多)。我在该函数中编写 linq 时遇到问题。我可以很容易地添加一个人对象,但有条件地添加 1 个或多个孩子很难。这是我到目前为止所拥有的:

    doc.Element("People").Add(
            new XElement("Person", 
                new XElement("Name", person.name),
                new XElement("Address", person.address),
                new XElement("jobTitle", person.jobTitle)))

如果孩子存在,我如何有条件地添加孩子?

public class person { public List<Child> childList; public string name; public string address; public string jobTitle }

public class child { public string name; public int age; }

4

1 回答 1

3

如果孩子存在,我如何有条件地添加孩子?

三个选项:

  • 在调用中使用null参数XElement;这将被忽略
  • 传入一个空的子序列;再次,这将无关紧要
  • 构建元素的其余部分,然后有条件地调用Add

如果不查看您的Person类型的代码,很难给出更具体的建议。

(顺便说一句,看起来你的元素实际上应该是child而不是子元素,假设每个子元素都有一个元素......)

编辑:现在我们可以看到您的代码,看起来您只是想要:

doc.Element("People").Add(
        new XElement("Person", 
            new XElement("Name", person.name),
            new XElement("jobTitle", job.title),
            person.children.Select(c => new XElement("children",
                new XElement("Name", c.name),
                new XElement("Age", c.age)))));

请注意,当涉及到元素名称时,您目前的大小写非常不一致,而且像这样公开公共字段也是一个坏主意。

于 2012-08-16T15:44:19.827 回答