【问题标题】:XML tagname is a PHP functionXML 标记名是一个 PHP 函数
【发布时间】:2016-11-18 09:47:50
【问题描述】:

我正在尝试使用 simplexml_load_file 函数在 PHP 中解析 XML 文件。一切都很好,除了我的 XML 文件有一个 <TIME> 标签,这是一个 PHP 函数。

所以下面的代码获取标签值失败:

$xml = simplexml_load_file('some_xml_file.xml');
$value = $xml->SOME_TAG->TIME;

我如何得到这个值?

【问题讨论】:

  • 您能否尝试更具体地说明您遇到了什么样的错误?因为据我所知,PHP not 在这种情况下会尝试执行函数 time(),因为它没有任何括号(函数调用所必需的)。同样,在-> 之后,PHP 会查找对象的成员,不是一般函数。

标签: php xml function tags


【解决方案1】:

来自 PHP 手册:

访问 XML 文档中不包含字符的元素 根据 PHP 的命名约定(例如连字符)允许 通过将元素名称封装在大括号和 撇号。

示例#3 获取

<?php
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

echo $xml->movie->{'great-lines'}->line; // "PHP solves all my web problems"
?>

如果你需要获取一个属性,你可以这样做:

到目前为止,我们只介绍了读取元素名称和 他们的价值观。 SimpleXML 还可以访问元素属性。使用权 元素的属性就像数组的元素一样。

foreach ($xml->movie[0]->rating as $rating) {
    switch((string) $rating['type'])

【讨论】:

    【解决方案2】:

    这对我有用

    <?php
    
    $xmlString = "<top><middle><TIME>1:27</TIME></middle></top>";
    $xml = simplexml_load_string($xmlString);
    echo $xml->middle->TIME;
    
    
    php /tmp/xml.php 
    1:27
    

    【讨论】:

      【解决方案3】:

      检查您的 XML 文件的内容。为了让您的 PHP 代码正常工作,它至少应该包含以下内容:

      <XML>
      <SOME_TAG>
         <TIME>1:27</TIME>
      </SOME_TAG>
      </XML>
      

      当我将此 XML 文件与您的代码结合使用时,它按预期工作。

      【讨论】:

        【解决方案4】:

        谢谢大家,我设法得到了价值,但仍有一些奇怪的地方。 XML 示例:

        <INGREDIENTS>
           <INGREDIENT>
              <NAME>Potatoes</NAME>
              <AMOUNT>10 kg</AMOUNT>
              <TME>20 min</TIME>
           </INGREDIENT>
        </INGREDIENTS>
        

        获取 NAME、AMOUNT 和 TIME 值的 PHP 代码:

        $ing = $xml->INGREDIENTS->INGREDIENT;
        $name = $ing->NAME;
        $amount= $ing->AMOUNT;
        $time= $ing->TIME;
        echo $name." / ".$amount." / ".$time;
        

        结果:

        Potatoes / 10 kg / 
        

        但是,如果我使用 TIME 标记的整个路径:

        $ing = $xml->INGREDIENTS->INGREDIENT;
        $name = $ing->NAME;
        $amount= $ing->AMOUNT;
        $time= $xml->INGREDIENTS->INGREDIENT->TIME;
        echo $name." / ".$amount." / ".$time;
        

        结果:

        Potatoes / 10 kg / 20 min
        

        谁能解释一下为什么会这样?

        【讨论】:

        • 我在旧的 PHP 5.4.25 上,给定您的 XML 文件示例,这对我有用:$xml = simplexml_load_file('some_xml_file.xml'); $ing = $xml-&gt;INGREDIENT; $name = $ing-&gt;NAME; $amount= $ing-&gt;AMOUNT; $time= $ing-&gt;TIME; 所以答案是:您需要使用正确的方式来访问 SimpleXMLObjects 的属性.. .
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-09
        • 1970-01-01
        相关资源
        最近更新 更多