无法从XML中获取单个XElement

本文关键字:获取 单个 XElement XML | 更新日期: 2023-09-27 18:08:49

我有一个XML文件,它的结构是这样的:

<scan client="Computer1" end="9/20/2016 7:00:00 AM" start="9/20/2016 7:00:00 AM">
  <childfile>
    <name>file.ext</name>
    <lastmodified>8/31/2016</lastmodified>
    <age>19</age>
  </childfile>
  <childfile>
    <name>file2.ext</name>
    <lastmodified>9/1/2016</lastmodified>
    <age>18</age>
  </childfile>
  <childfile>
    <name>file3.ext</name>
    <lastmodified>8/19/2016</lastmodified>
    <age>31</age>
  </childfile>
  <childfile>
    <name>file4.ext</name>
    <lastmodified>8/23/2016</lastmodified>
    <age>27</age>
  </childfile>
</scan>
<scan client="Computer2" end="9/20/2016 7:00:00 AM" start="9/20/2016 7:00:00 AM">
  <childfile>
    <name>file.ext</name>
    <lastmodified>8/31/2016</lastmodified>
    <age>19</age>
  </childfile>
  <childfile>
    <name>file2.ext</name>
    <lastmodified>9/1/2016</lastmodified>
    <age>18</age>
  </childfile>
  <childfile>
    <name>file3.ext</name>
    <lastmodified>8/19/2016</lastmodified>
    <age>31</age>
  </childfile>
  <childfile>
    <name>file4.ext</name>
    <lastmodified>8/23/2016</lastmodified>
    <age>27</age>
  </childfile>
</scan>

我要发送一个新的XML元素,看起来像上面的那些,它将是这样的:

<scan client="Computer1" end="9/25/2016 7:00:00 AM" start="9/25/2016 7:00:00 AM">
  <childfile>
    <name>file.ext</name>
    <lastmodified>8/31/2016</lastmodified>
    <age>19</age>
  </childfile>
  <childfile>
    <name>file2.ext</name>
    <lastmodified>9/1/2016</lastmodified>
    <age>18</age>
  </childfile>
</scan>

如何搜索原始XML以查看它是否有一个扫描部分具有与所提供的客户端属性匹配的元素,如果匹配,则将该元素替换为所提供的元素。如果没有找到匹配项,则需要将该元素添加到现有元素中。

我试图使用:

originalXML.Elements("scan").SingleOrDefault(e => e.Attribute("client").Value == client)

使用

设置客户端变量
string client = replacementXML.Attribute("client").Value;

似乎每次都返回null,即使我检查了客户端字符串并将其设置为"Computer1"。

为什么总是返回null?

无法从XML中获取单个XElement

你有两个问题…

  1. 格式错误的XML -必须有根元素
  2. 你需要从根对象中引用你的"scan"元素

所以你的linq2xml看起来像这样…

var client = replacementXML.Root.Attribute("client").Value;
var match = originalXML.Root.Elements("scan")
       .SingleOrDefault(e => e.Attribute("client").Value == client);

好吧,我想我有点晚了。我看到你的评论说你已经修好了。:)