2016-09-26 9 views
0

У меня есть файл XML, который структурирован следующим образом:не удается получить ни одного XElement из 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; 

кажется, что это возвращает нуль каждый раз, даже если я проверил строку клиента и устанавливается на «Компьютер1».

Любые мысли о том, почему это всегда возвращает null?

+0

Что произойдет, если вы попробуете 'originalXML.Root.Elements (« scan ») ...' – Jonesopolis

+2

Либо ваш xml неверен (у xml может быть только один корневой элемент), либо вы не показываете весь xml. Это затрудняет нам определение того, как получить доступ к определенному элементу. – Kevin

+0

@Jonesopolis, если я изменю его на originalXML.Root.Elements .... он по-прежнему возвращает null. – Vladmere

ответ

0

У вас есть две проблемы ...

  1. искаженной XML - Вы должны иметь корневой элемент
  2. Вы должны ссылаться на свои элементы «сканирования» от корневого объекта

Так что ваши linq2xml будет выглядеть следующим образом ...

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

хорошо хорошо я предполагаю, что я немного поздно .. Я вижу тебя r комментарий, что вы его исправили. :)