• Поиск последнего дочернего элемента и добавление следующего в xml-документе, ошибка в логике?

    aush
    @aush
    Элементы не находятся из-за неймспейсов. Я не спец в этом, работа с xml с неймспейсами мне всегда казалась какой-то мистикой, но вот так работает:

    var xml = XDocument.Parse(
    @"<?xml version='1.0' encoding='utf-8'?>
    <!-- This is a SCORM 1.2 manifest file, created 9/1/2014 1:52:58 PM by semina using CourseLab 140211 -->
    <manifest xmlns='http://www.imsproject.org/xsd/imscp_rootv1p1p2' xmlns:adlcp='http://www.adlnet.org/xsd/adlcp_rootv1p2' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation=' http://www.imsproject.org/xsd/imscp_rootv1p1p2 imscp_rootv1p1p2.xsd http://www.adlnet.org/xsd/adlcp_rootv1p2 adlcp_rootv1p2.xsd' identifier='MANIFEST-5D060C55_4EC0_4E49_8D2F_F5C934FFEDAD' version='1.0'>
      <title>Технолог подсистемы САДД БР. Работа с модулем «Справочники»</title>
      <item identifier='im_1' identifierref='RES1' parameters='?width=1152&amp;height=920'>
        <title>Информационный материал</title>
      </item>
      <item identifier='im_1' identifierref='RES1' parameters='?width=1152&amp;height=920'>
        <title>Информационный материал</title>
      </item>
    </manifest>");
    
    var ns = xml.Root.GetDefaultNamespace();
    
    foreach (var element in xml.Root.Descendants().Where(e => e.Name == ns + "item"))
    {
        var last = element.Elements().Last();
        if (last.Name == ns + "title")
        {
            last.AddAfterSelf(
                new XElement("track", 
                    new XAttribute("id", ""), 
                    new XAttribute("genre", "Break Beat")));
        }
    }
    Ответ написан
    1 комментарий