2012-08-03 131 views
0

我已经搜索了高和低,我无法找到我的情况的直接答案。我有以下XML:使用PHP中的命名空间解析XML

<Tims xmlns="http://my.url.com/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://my.url.com/namespace http://my.url.com/xsd/Tims.xsd"> 
<Database xlink:href="http://my.url.com/xml/performance/database.svc"> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq11p/project.svc" title="Title1">Tvq11p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq10p/project.svc" title="Title2">Tvq10p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq8p/project.svc" title="Title3">Tvq8p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq9p/project.svc" title="Title4">Tvq9p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq5p/project.svc" title="Title5">Tvq5p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq15p/project.svc" title="Title6">Tvq15p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq2p/project.svc" title="Title7>Tvq2p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq3p/project.svc" title="Title8">Tvq3p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq12p/project.svc" title="Title9">Tvq12p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq13p/project.svc" title="Title10">Tvq13p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq14p/project.svc" title="Title11">Tvq14p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq1p/project.svc" title="Title12">Tvq1p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq4p/project.svc" title="Title13">Tvq4p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq6p/project.svc" title="Title14">Tvq6p</ProjectID> 
    <ProjectID xlink:href="http://my.url.com/xml/Tvq7p/project.svc" title="Title15">Tvq7p</ProjectID> 
</Database> 
<Timestamp>2012-08-03T09:47:06-04:00</Timestamp> 
<ExecutionTime>0.01</ExecutionTime> 
</Tims> 

所有我想要做的就是提取每个ProjectID节点的属性和值..

我试过DOM,SimpleXML和XMLParser的。这完全在PHP中,但是,只要可以从Unix命令行执行,我就可以使用其他语言。

谢谢!

UPDATE 我已经试过: 我主要是删除了我的努力,我尝试和失败。我最近的迭代是这样的:

$return = send_request($requestUri, TIMS_REQUEST_TIMEOUT); // returns SimpleXMLElement 
$return->registerXPathNamespace('e', 'http://www.webex.com/schemas/2002/06/service/event'); 
foreach($return->xpath('//ProjectID') as $project) { 
    $project->registerXPathNamespace('xlink', 'http://www.w3.org/1999/xlink'); 
    print_r($project); 
} 

我的print_r永远不会火。

+1

您的title7属性缺少结束报价。这是你的问题吗? – 2012-08-03 14:45:57

+0

您的Tims元素也应该自动关闭。 – 2012-08-03 14:49:24

+0

对不起,可怜的复制/粘贴...更新。 – 2012-08-03 14:51:10

回答

1

您不需要为这样简单的XML模式使用XPath。试试这个:

foreach($xml->Database->ProjectID as $el) { 
    $attributes = $el->attributes('xlink', true); 
    echo $attributes['href'] . ' ' . $el . "\n"; 
} 

这是循环的所有ProjectID节点和抓住href属性和打印节点的内容。修复title="Title7属性中缺失的报价后,此worked for me

+0

那么....我真的** AM **那么笨?啊。谢谢...作品像一个惊人的魅力。 – 2012-08-03 15:04:25

+0

@Honus没问题!我很高兴能够提供帮助。 – nickb 2012-08-03 15:06:43