使用命名空间从XML中提取数据

时间:2016-02-05 01:03:30

标签: php xml parsing namespaces extract

您好我无法正确编码从下面的XML响应中提取这一个字符串(hostPIN)。我一直在搜索和搜索,无法得到任何工作。任何人都可以指导我如何使用PHP提取数据?谢谢!

我只发布了我需要获取的数据的路径,因为xml数据非常大。

<serv:message>
 <serv:body>
  <serv:bodyContent xsi:type="use:getUserResponse">
   <use:personalMeetingRoom>
     <use:hostPIN>1234</use:hostPIN>

如何提取1234?名称空间让我感到困惑,我已经发布了帖子,但找不到可以使用的名称。

感谢任何人提供的任何帮助!

2 个答案:

答案 0 :(得分:1)

感谢@ fusion3k经过一些调整后,我得到了

$dom = new DOMDocument();
$dom->loadXML( $data, LIBXML_NOBLANKS );
$nsURI = "http://www.webex.com/schemas/2002/06/service/user";
foreach( $dom->getElementsByTagNameNS ( $nsURI , 'hostPIN' ) as $node )
{
   echo $node->nodeValue.PHP_EOL;
}

答案 1 :(得分:0)

这是DOMDocument的基本示例:

$dom = new DOMDocument();
$dom->loadXML( $xmlString, LIBXML_NOBLANKS );
$nsURI = $dom->lookupNameSpaceUri( 'use' );
foreach( $dom->getElementsByTagNameNS ( $nsURI , 'hostPIN' ) as $node )
{
    echo $node->nodeValue.PHP_EOL;
}

如果您要从文件/网址加载xml而不是字符串,请使用$dom->load代替$dom->loadXML

$node->nodeValue是您想要的值。

请注意:

在上面的示例中,$dom->lookupNameSpaceUri( 'use' )可能不起作用,具体取决于声明命名空间的位置。在这种情况下,您可以找到namespaceURI(它在文档中的某处声明为xmlns:use="http://example.com/someurl")并替换此行:

$nsURI = $dom->lookupNameSpaceUri( 'use' );

白衣:

$nsURI = "http://example.com/someurl";