2012-08-03 58 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