PHP Получение родительского идентификатора => дочернего значения в виде массива из XML - PullRequest
1 голос
/ 28 сентября 2010

У меня есть XML-файл с такой структурой

<serieslist>
    <series sid="123">
        <title type="main">Series 123 Main Title</title>
        <title type="official">Series 123 Official Title</title>
        <title type="short">S 123</title>
    </series>
    <series sid="456">
        <title type="main">Series 456 Main Title</title>
        <title type="official">Series 456 Official Title</title>
        <title type="short">S 456</title>
    </series>
    /* +6000 more <series> nodes */
</serieslist>

Мне нужно создать ассоциативный массив, состоящий из атрибутов "sid" и основных названий серий, подобных этой

array(
    123 => "Series 123 Main Title",
    456 => "Series 456 Main Title",
    //...
);

Я попытался использовать этот запрос xpath //series/title[@type="main"], и я получил список узлов

$xml = DOMDocument::load('serieslist.xml');
$xpath = new DOMXPath($xml);
$titles = $xpath->query('//series/title[@type="main"]');
$series = array();
foreach($titles as $title) {
    $series[] = $title->nodeValue;
}

Результаты в

$series = array(
    0 => "Series 123 Main Title",
    1 => "Series 456 Main Title",
    //...
);

Но мне также нужен родительский атрибут "sid". Как я могу сделать это не ресурсоемким способом?

1 Ответ

1 голос
/ 28 сентября 2010

Довольно просто. Просто укажите родительский узел на $title:

foreach($titles as $title) {
    $id = $title->parentNode->getAttribute('sid');
    $series[$id] = $title->nodeValue;
}
...