【问题标题】:PHP: Get array of text from perticular XML node type?PHP:从特定的 XML 节点类型获取文本数组?
【发布时间】:2010-10-30 10:28:09
【问题描述】:

我对 PHP 或 XML 并不完全陌生,但我对将 XML 与 PHP 配对是 100% 的新手。我有一个 XML 字符串,它有几个节点,但我唯一感兴趣的是 节点,每个节点的数量不确定,每个节点都包含这样的短语:蓝色钻石珠宝 例如字符串看起来像这样:

<xml>
<pointless_node/>
<seq>
<keyword>diamond ring</keyword>
<keyword>ruby necklace</keyword>
<keyword>mens watch</keyword>
</seq>
<some_node/>
</xml>

我想要一个这样的数组:

['diamond ring','ruby necklace','mens watch']

我尝试查看 PHP 手册,只是感到困惑,不知道该怎么做。有人可以指导我如何做到这一点吗?我正在使用 PHP4。

谢谢!

【问题讨论】:

    标签: php xml php4


    【解决方案1】:

    这会将 $keywords 变成一个数组 对象。有没有办法得到 来自对象的文本?

    当然,看看这个。

    $dom = domxml_open_mem($str);
    $keywords = $dom->get_elements_by_tagname('keyword');
    
    foreach($keywords as $keyword) {
        $text = $keyword->get_content();
        // Whatever
    }
    

    【讨论】:

    • 非常感谢您抽出宝贵时间回答我的问题,不幸的是,您在代码中发布了 $text == 'Object' 而不是标签中的文本。
    • 我的错,使用 $text = $keyword->get_content();
    【解决方案2】:

    见:http://www.php.net/simplexml-element-xpath 试试下面的 xpath 和数组构造

    $string = "<xml>
    <pointless_node/>
    <seq>
    <keyword>diamond ring</keyword>
    <keyword>ruby necklace</keyword>
    <keyword>mens watch</keyword>
    </seq>
    <some_node/>
    </xml>";
    
    $xml = domxml_open_mem($xmlstr)
    
    $xpath = $xml->xpath_new_context();
    $result = xpath_eval($xpath,'//keyword');
    
    foreach ($result->nodeset as $node)
    {
         $result[] = $node->dump_node($node);
    }
    

    编辑:修改代码以反映 php 4 要求 编辑:修改以说明 xpath_new_context 记录不良的行为(php docs cmets 指出错误)

    【讨论】:

    • simplexml 不只适用于 php-versions > 5 吗?
    • 我什至会使用//keyword/text() xpath
    • 修改为使用 php 4 中的 domxml。未经测试,因为我无法使用 php 4 访问服务器
    • 谢谢我试过这个,我得到这个错误:警告:xpath_new_context() 期望参数 1 是对象,给定的布尔值。
    • 更改了 $xpath = xpath_new_context();到 $xpath = $xml->xpath_new_context();
    【解决方案3】:

    我认为最简单的是:

    $dom = domxml_open_mem($str);
    $keywords = $dom->get_elements_by_tagname('keyword');
    

    【讨论】:

    • 这会将 $keywords 转换为对象数组。有没有办法从对象中获取文本?
    【解决方案4】:

    XML_Parser->xml_parse_into_struct() 可能是您正在寻找的。 适用于 PHP 版本 >= 4

    http://se.php.net/xml_parse_into_struct
    http://www.w3schools.com/PHP/func_xml_parse_into_struct.asp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多