невозможно добавить дочерний элемент в узел XML в PHP

1

Я пытаюсь добавить дочернюю заметку в файл XML с помощью PHP. Я использовал один и тот же метод примерно 5 раз раньше, и каждый работает так, как ожидалось, однако этот метод использует другую структуру xml для нового файла (что, я думаю, может быть частью проблемы).

Метод, вызывающий у меня проблему, заключается в следующем:

function addCourseToProject($name, $project){
    $projects = self::getRoles();
    $theProject = $projects->xpath('project[name = "'.$project.'"]');
    echo $theProject->name;
    $theCourses = $theProject[0]->courses->addchild("course", $name);
    $projects->asXml("projects.xml");

}

Файл XML выглядит так:

<projects>
    <project>
        <name>Alpha</name>
            <courses>
                <course>Beta</course>
                <course>Charlie</course>
            </courses>
    </project>
</project>

И getRoles() выглядит так:

function getRoles(){
     $roles = simplexml_load_file("projects.xml") or die("ERROR: Unable to read file");
return $roles;
}

Я здесь не понимаю, я понятия не имею, почему это отличается от других функций добавления (см. Ниже).

Если кто-то может оказать некоторую помощь, я был бы признателен :)


Если вам это нужно:


Пример того, как выглядят мои другие методы:

function addModule($courseName, $name, $link){  
    $xml = self::getXml();#get the xml file
    $course = $xml->xpath('course[name = "'.$courseName.'"]');
    $module = $course[0]->addChild("module");
    $module->addChild("name", $name);
    $module->addChild("link", $link);
    $xml->asXml("data.xml");
    echo self::toJSON($course);
}

и метод getXML():

function getXml(){
     $xml=simplexml_load_file("data.xml") or die("ERROR: Unable to read file");
    return $xml;
}
  • 0
    нет, я ищу проект, чьим первым дочерним элементом является <name>"Alpha"</name> ... хотя я мог бы реструктурировать XML-файл, если это облегчит эту задачу?
  • 0
    Ах, подождите, нет, я не могу, это потребует от меня переписать ряд функций: /
Показать ещё 5 комментариев
Теги:

1 ответ

1
Лучший ответ

Оказалось, что проблема была вызвана тем, что элемент <project> вложен в XML-документ. Вы можете использовать ось descendant-or-self (// для сокращенного синтаксиса), чтобы получить вложенный элемент следующим образом:

$theProject = $projects->xpath('//project[name = "'.$project.'"]');

или указать полный путь:

$theProject = $projects->xpath('/projects/project[name = "'.$project.'"]');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню