PHP SimpleXML获得价值

时间:2014-07-05 02:19:15

标签: php xpath simplexml

<?xml version="1.0" encoding="UTF-8"?>
<languages>
    <language lan="de">
        <lanString key="siteTitle">Simple engine DE</lanString>
    </language>
    <language lan="en">
        <lanString key="siteTitle">Simple engine EN</lanString>
        <lanString key="welcomeText">Welcome to Simple engine</lanString>
    </language>
</languages>

如何使用密钥访问lanString的值:&#34; siteTitle&#34; 我尝试了以下内容:

public function getString($key, $lan){
    return $this->mXmlFile->xpath('language[@lan="'.$lan.'"]/lanString[@key="'.$key.'"]');
}

但没有输出:(

1 个答案:

答案 0 :(得分:0)

以下代码使用您提供的相同XML以及对xpath()的相同调用,效果很好:

function getString($xml, $key, $lan){
  return $xml->xpath('language[@lan="'.$lan.'"]/lanString[@key="'.$key.'"]');
}

$data = '<?xml version="1.0" encoding="UTF-8"?>
  <languages>
    <language lan="de">
      <lanString key="siteTitle">Simple engine DE</lanString>
  </language>
  <language lan="en">
      <lanString key="siteTitle">Simple engine EN</lanString>
      <lanString key="welcomeText">Welcome to Simple engine</lanString>
  </language>
</languages>';

$xml = new SimpleXMLElement($data);

print_r(getString($xml, "siteTitle", "de"));

为简单起见,我将方法更改为一个简单的函数。打印出来:

Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [key] => siteTitle
                )

            [0] => Simple engine DE
        )
)

所以我认为你提供的代码是可以的。如果它没有显示任何输出,则问题可能在其他地方......