使用自己的命名空间访问子节点

时间:2013-12-23 14:06:12

标签: php xml-parsing simplexml

我有以下xml字符串:

<PagesCreated xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <PageCreated>
        <Appeal>General Appeal</Appeal>
        <Fundraiser xmlns:a="http://schemas.datacontract.org/2004/07/GG.Api.Services.Data.Dto.PagesCreated">
            <a:FirstName>Michelle</a:FirstName>
        </Fundraiser>
        <Id>4965523</Id>
    </PageCreated>
</PagesCreated>

然后我处理:

$xml = new SimpleXMLElement($trimmed_result);

然后我可以使用:

访问PagesCreated的子节点
 foreach ($xml->PageCreated as $PageCreated)
 {
    die(print_r($PageCreated->children()));
 }

我的问题是我无法访问<Fundraiser xmlns:a="http://schemas.datacontract.org/2004/07/GG.Api.Services.Data.Dto.PagesCreated">节点。我假设这是因为它是该命名空间的根。

如何访问<Fundraiser>元素中的节点?

2 个答案:

答案 0 :(得分:1)

必须编辑XML <Event>才能正常工作......

确定无效(例如使用FirstName):

foreach($xml->xpath('//Fundraiser') as $f) {
 var_export($f->xpath('a:FirstName'));
}

Here is an updated working link, with 3 Fundraisers; special thanks to @IMSoP

答案 1 :(得分:0)

问题是名称空间前缀。您必须使用ns前缀作为参数调用children方法。看http://www.php.net/manual/en/simplexmlelement.children.php

在你的情况下:

$ns = $PageCreated->getNamespaces(true);
$PageCreated->children($ns['a']);

children方法只返回具有该前缀的节点。所有其他人都将被忽略。