使用PHP SimpleXMLElement将XML解析为HTML

时间:2015-09-12 15:49:12

标签: php html xml parsing simplexml

我在使用SimpleXMLElement时遇到了一些问题,希望能得到一些帮助。

我正在阅读SimpleXMLElement,我构建了一个PHP页面来解析这个XML:

<?xml version='1.0'?>
<AdXML>

<Response>
    <Campaign>
        <Overview>
            <Name>strip</Name>
                <Description>category</Description>
                <Status>L</Status>
        </Overview>
        <Pages>
            <Url>page01</Url>
            <Url>page02</Url>
            <Url>page03</Url>
        </Pages>
    </Campaign>
</Response>
</AdXML>

标记“页面”可以包含任意数量的标记“Url”其他标记可能只有一个值,例如标记“名称”。

阅读SimpleXMLElement我最终得到了以下代码:

$xmlparsed = new SimpleXMLElement($xml); //my xml is being sent as variable

要显示单个值,我使用下面的代码时没有问题:

<?php echo $xmlparsed->Response[0]->Campaign[0]->Overview[0]->Name;?>

一切正常。但是当我尝试用多行解析一个标签时,我只得到一行,每次刷新页面时它都会给我一个不同的“url”值。这是我正在使用的代码:

<?php foreach ($xmlparsed->Response->Campaign->Pages as $Pages) {echo $Pages->Url, PHP_EOL;} ?>

根据PHP的网站:http://php.net/manual/en/simplexml.examples-basic.php这应该有效,但事实并非如此。

由于我不是PHP方面的专家,因此我会在试错的基础上测试代码。

我在这里做错了什么?

提前感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您只有一个Pages,因此您只需输入foreach一次。尝试循环urls

$xml = "<?xml version='1.0'?>
<AdXML>

<Response>
    <Campaign>
        <Overview>
            <Name>strip</Name>
                <Description>category</Description>
                <Status>L</Status>
        </Overview>
        <Pages>
            <Url>page01</Url>
            <Url>page02</Url>
            <Url>page03</Url>
        </Pages>
    </Campaign>
</Response>
</AdXML>";
$xmlparsed = new SimpleXMLElement($xml);
foreach ($xmlparsed->Response->Campaign->Pages->Url as $url) {
    echo $url, PHP_EOL;
}

输出:

page01
page02
page03

答案 1 :(得分:0)

您也可以使用XPath

foreach( $xml->xpath( 'Response/Campaign/Pages/Url' ) as $url ) {
    echo $url;
}