将XML节点值放在使用PHP创建的页面上

时间:2013-12-12 22:43:50

标签: php xml loops fopen fwrite

我的问题与将XML数据放到用PHP创建的特定文件上有关。

说这是我正在使用的XML,一个名为music.xml的文件:

<XML_DATA item=“MusicBands”>
    <Musicians>
        <Person instrument="guitar">Clapton, Eric</Person>
        <Person instrument="guitar">Hendrix, Jimi</Person>
        <Person instrument="bass">McCartney, Paul</Person>
        <Person instrument="drums">Moon, Keith</Person>
        <Person instrument="guitar">Page, Jimmy</Person>
    </Musicians>
</XML_DATA>

这样,我加载了feed,并根据“instrument”属性创建了PHP文件:

// Loads the xml feed
$xml = simplexml_load_file("http://example.com/music.xml");
$instrument_by_names = $xml->Musicians->Person;

// This is to make sure repeat attribute values don't repeat
$instrument_loops = array();
foreach($instrument_by_names as $instrument_by_name){
    $instrument_loops[] = (string) $instrument_by_name->attributes()->instrument;
}
$instrument_loops = array_unique($instrument_loops);

// This is where I need help
foreach($instrument_loops as $instrument_loop){
    $page_url = $instrument_loop.'.php';
    $my_file = $page_url;
    $handle = fopen($my_file, 'w') or die('Cannot open file:  '.$my_file);
    $page_data = 'Here lays the issue.';
    fwrite($handle, $page_data);
}

这样可以毫无困难地创建guitar.php,bass.php和drums.php。 $ page_data也写在页面上,但这是我难倒的地方。

我想在每个页面上放置相应的节点值。因此,“Clapton,Eric”,“Hendrix,Jimi”,“Page,Jimmy”将出现在guitar.php上,“McCartney,Paul”将出现在bass.php上,“Moon,Keith”出现在drums.php上。我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

(string) $instrument_by_name应包含该节点的文本(人名),$instrument_by_names已填充$xml->Musicians->Person

$instrument_by_names应该被称为$persons,因为您正在处理<persons>元素,然后在循环中通过{{获取@instrument属性值1}}

实际上,您要么必须改进$instrument_by_name->attributes()->instrument结构,要么使用xpath来查询XML结构。

$instrument_loops