【问题标题】:c# XML and LINQc# XML 和 LINQ
【发布时间】:2012-08-17 00:04:00
【问题描述】:

我有一个如下所示的 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; }

【问题讨论】:

    标签: c# xml linq


    【解决方案1】:

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

    三个选项:

    • XElement 调用中使用null 参数;将被忽略
    • 传入一个空的子序列;同样,这将无关紧要
    • 构建元素的其余部分,然后有条件地调用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)))));
    

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

    【讨论】:

    • 你能举个例子吗?所涉及的类和他们得到的一样简单,公共字符串成员或子类和人员类。
    • @user1048323:您的评论不清楚,但请在您的问题中包含相关类。特别是,由于“children”是复数形式,我希望将某种 collection 作为 Person 的属性,但您还没有解释可用的内容。
    • 'public class Person { public List childList;公共字符串名称;公共字符串地址;公共字符串作业标题; }
    • 公共类子{公共字符串名称;公开年龄; }
    • @user1048323:正如我之前所说,请将代码编辑到您的问题中。 (另外,如果我是你,我会避免使用公共字段......)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多