SimpleXML 和命名空间

发布于 2024-11-26 16:50:23 字数 248 浏览 0 评论 0原文

我有以下代码。

 <entry>
  <job:location>
   <job:id>24</job:id>
   <job:region>6</job:region>
  </job:location>
 </entry>

我的命名空间有问题。如何读取 SimpleXML 中 job:region 标签的内容。

I have following code.

 <entry>
  <job:location>
   <job:id>24</job:id>
   <job:region>6</job:region>
  </job:location>
 </entry>

I've problem with namespaces. How I can read content of job:region tag in SimpleXML.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

围归者 2024-12-03 16:50:23

试试这个:

 <?php 
    $entry = simplexml_load_file('entry.xml');        
    printf("%s\n", $entry->children('job', true)->location->region);  
 ?> 

要检查上面的代码是否有效,请单击此处

有关 SimpleXml 的更多信息,请参阅此文章

Try this:

 <?php 
    $entry = simplexml_load_file('entry.xml');        
    printf("%s\n", $entry->children('job', true)->location->region);  
 ?> 

To check the above code in action, click here

For more information about SimpleXml refer to this article

冰火雁神 2024-12-03 16:50:23

您应该注册作业命名空间,然后您可以使用注册的命名空间- XPath 中的前缀来选择您想要的内容:

$sxe = new SimpleXMLElement($xml);

$sxe->registerXPathNamespace('job', 'http://example.org/you-did-not-provide-the-job-namespaceURI-in-your-example');
$result = $sxe->xpath('//entry/job:location/job:region');

foreach ($result as $location) {
  echo $location . "\n";
}

You should register the job namespace, then you can use the registered namespace-prefix in an XPath to select what you want:

$sxe = new SimpleXMLElement($xml);

$sxe->registerXPathNamespace('job', 'http://example.org/you-did-not-provide-the-job-namespaceURI-in-your-example');
$result = $sxe->xpath('//entry/job:location/job:region');

foreach ($result as $location) {
  echo $location . "\n";
}
牵你的手,一向走下去 2024-12-03 16:50:23

我会动态地做。

$xml = @simplexml_load_string($path) // loads your valid xml data
foreach($xml->channel->item as $entry) {

  $namespaces = $entry->getNameSpaces(true);
  foreach($namespaces as $ns=>$value)
  {
    $job = $entry->children($namespaces[$ns]);
    $author = (string)$job->creator;

    if ($author != "")
    {
      $someVariable = (string) $dc->creator;
    }
}

I would do it dynamically.

$xml = @simplexml_load_string($path) // loads your valid xml data
foreach($xml->channel->item as $entry) {

  $namespaces = $entry->getNameSpaces(true);
  foreach($namespaces as $ns=>$value)
  {
    $job = $entry->children($namespaces[$ns]);
    $author = (string)$job->creator;

    if ($author != "")
    {
      $someVariable = (string) $dc->creator;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文