【问题标题】:php parse xml get attributephp解析xml获取属性
【发布时间】:2017-08-02 09:43:58
【问题描述】:

我是php新手。

所以,我想从 url 解析 xml,例如:

<?xml version="1.0" encoding="utf-8"?>
<all_emp>
<emp_detail>
    <emp emp_name="john"><img>john_1.jpg</img></emp>
    <emp emp_name="john"><img>john_2.jpg</img></emp>
    <emp emp_name="john"><img>john_3.jpg</img></emp>
    <emp emp_name="marry"><img>marry_1.jpg</img></emp>
    <emp emp_name="marry"><img>marry_2.jpg</img></emp>
    <emp emp_name="david"><img>david_1.jpg</img></emp>
</emp_detail>
</all_emp>

我创建了代码来解析它:

function get_empname() {
    $url ='http://.../emp_test.xml';
    $xml=simplexml_load_file("$url") or die("Error: Cannot create object");
    foreach($xml->children() as $emp_detail) {
        $source = $xml->emp_detail->emp->attributes()->emp_name . "<br>";
        return $source; 
    } 
}

我可以解析xml。

但是,这是我得到的结果:

john

我对此有疑问:

  1. 如何获取所有emp_name属性?

  2. 如果emp_name相同,如何分组?

感谢您的阅读!

【问题讨论】:

  • 不是 100% 肯定,但我认为您的 XML 存在语法错误。据我所知,它不允许在同一个元素内有多个同名的属性。 (您的emp_detail 中有多个john)。如果我错了,请有人纠正我。
  • @Twinfriends :可能是。但使用 c#,我可以解析它。所以,当我将其更改为 php 和 wordpress 时,我不能。我认为解析 xml 的代码是错误的。
  • 2.去研究所谓的控制中断。 3. 你听说过if ...吗?那么真正的问题在哪里呢?不知道字符串比较是如何工作的?
  • @CBroe:我会试试的。

标签: php xml wordpress


【解决方案1】:

看起来你的 XML 被正确解析了,你唯一的问题是你从循环中返回,导致它只运行一次。对 emp_name 部分尝试以下操作。这也将只返回 unqiue 名称。

function create_shortcode_empname()
{
    $url ='http://localhost/emp_test.xml';
    $xml=simplexml_load_file("$url") or die("Error: Cannot create object");
    $names = array();   
    $emps = $xml->children()->emp_detail->emp ; 
    foreach($emps as $emp_detail)
    {
        $source = (string)$emp_detail->attributes()->emp_name; 
        $names[]= $source; 
    } 
    $names = array_unique($names); 
    return implode("<br />", $names);
}

add_shortcode( 'empname_shortcode', 'create_shortcode_empname' );

【讨论】:

  • 还是那样。
  • 你的意思是你仍然使用这个函数只得到名字?
  • 好的,我修改了函数并测试了它。所以它现在应该可以工作了。如果仍然没有,请将您的 PHP 版本发给我。
  • 它工作。太感谢了。但我在帖子中有另一个问题是:如何使用 emp_name 获取 img 是 john?你能做到吗?或者我需要标记你的答案,用你的答案更改帖子以正确并发布新问题?
  • 我是。非常感谢。
猜你喜欢
  • 2010-11-12
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 2017-05-02
  • 1970-01-01
相关资源
最近更新 更多