如何使用php读取xml文件

时间:2018-09-10 20:38:56

标签: php xml

尝试从xml文件回显所有AudioTracks数据。
还尝试获取有效名称值。

我尝试了以下方法,但不知道如何做:

<?php

$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->load('1.xml');
$Tracks = $dom->getElementsByTagName('AudioTrack');
foreach($Tracks as $AudioTrack) {
    echo $AudioTrack->firstChild->firstChild->data . '<br/>';
}
?>

<?xml version="1.0" encoding="UTF-8"?>
<Pton MajorVersion="4" MinorVersion="9.5_326" SchemaChangeCount="4" 
Creator="Pton" Revision="io2f5nghga">
<LiveSet>
    <OverwriteProtectionNumber Value="2305" />
    <LomId Value="0" />
    <LomIdView Value="0" />
    <Tracks>
        <AudioTrack Id="14">
            <LomId Value="0" />
            <LomIdView Value="0" />
            <EnvelopeModePreferred Value="false" />
            <TrackDelay>
                <Value Value="0" />
                <IsValueSampleBased Value="false" />
            </TrackDelay>
            <Name>
                <EffectiveName Value="1-Audio" />
                <UserName Value="" />
                <Annotation Value="" />
            </Name>

2 个答案:

答案 0 :(得分:0)

尝试致电documentElement

$ dom-> documentElement-> getElementsByTagName('AudioTrack');

文档说像这样

documentElement:

  

这是一个方便属性,它允许直接访问子级   节点,即文档的文档元素。

答案 1 :(得分:0)

假设所有节点值都包含在一个属性中,并且要输出所有数据,则可以执行以下操作。

$Tracks = $dom->getElementsByTagName('AudioTrack');
foreach($Tracks as $AudioTrack) {
    $audioTrackAttributes = $AudioTrack->attributes;
    echo 'AudioTrack '.$audioTrackAttributes->item(0)->nodeValue.'<br/>';
    $TrackChildNodes = $AudioTrack->childNodes;
    foreach($TrackChildNodes as $child) {
        outputNode($child);
    }
    echo '<br/>';
}

function outputNode($nextNode)
{
    $childAttributes = $nextNode->attributes;

    if ( !empty($childAttributes) && $childAttributes->length > 0 ) { 
        echo $nextNode->nodeName . ': ' . $childAttributes->item(0)->nodeValue . '<br/>';
    } else {
        echo $nextNode->nodeName . '<br/>';
    }

    $grandchildNodes = $nextNode->childNodes;
    if ( !empty($grandchildNodes) ) {
        foreach($grandchildNodes AS $grandchild) {
            outputNode($grandchild);
        }
    }

    return;
}

您需要将数据封装在文档节点内,并正确关闭Pton节点。

<document>
    <Pton MajorVersion="4" . . . /> 
    <Etc.></Etc.>
</document>