基于属性打印XML文档的一部分?

时间:2012-01-07 01:21:34

标签: php xml simplexml

  

可能重复:
  SimpleXML get element content based on attribute value

我查看了几个相关主题但找不到答案。

如何打印,例如美元货币的库存价值?

            <?xml version="1.0"?>
            <currencies>
                <currency id="AUD">
                        <curr>Australian dollar</curr>
                        <loc>Australia, Australian Antarctic Territory, Christmas Island, Cocos (Keeling) Islands, Heard and McDonald Islands, Kiribati, Nauru, Norfolk Island, Tuvalu</loc>
                </currency>
                <currency id="USD">
                        <curr>United States Dollar</curr>
                        <loc>American Samoa, British Indian Ocean Territory, Caribbean Netherlands, Ecuador, El Salvador, Guam, Haiti, Marshall Islands, Micronesia, Northern Mariana Islands, Palau, Panama, Puerto Rico, Timor-Leste, Turks and Caicos Islands, United States, U.S. Virgin Islands, Barbados (as well as Barbados Dollar), Bermuda (as well as Bermudian Dollar), Zimbabwe</loc>
                </currency>
            </currencies>

我可以通过这样做来打印我想要的东西:

    foreach($xml as $currency) {
        echo $currency[0]->curr;
    }   

但这并不是我所追求的。另外 - 我的XML标记可以用于我想要实现的目标,还是可以通过更简单的方式实现?

2 个答案:

答案 0 :(得分:2)

使用XPath语法执行:http://php.net/manual/simplexmlelement.xpath.php

$string = '<?xml version="1.0"?>
            <currencies>
                <currency id="AUD">
                        <curr>Australian dollar</curr>
                        <loc>Australia, Australian Antarctic Territory, Christmas Island, Cocos (Keeling) Islands, Heard and McDonald Islands, Kiribati, Nauru, Norfolk Island, Tuvalu</loc>
                </currency>
                <currency id="USD">
                        <curr>United States Dollar</curr>
                        <loc>American Samoa, British Indian Ocean Territory, Caribbean Netherlands, Ecuador, El Salvador, Guam, Haiti, Marshall Islands, Micronesia, Northern Mariana Islands, Palau, Panama, Puerto Rico, Timor-Leste, Turks and Caicos Islands, United States, U.S. Virgin Islands, Barbados (as well as Barbados Dollar), Bermuda (as well as Bermudian Dollar), Zimbabwe</loc>
                </currency>
            </currencies>';

$xml = new SimpleXMLElement($string);
var_dump($xml->xpath('//currency[@id="USD"]');

答案 1 :(得分:0)

尝试

$data = simplexml_load_string($xml);
foreach($data->currencies as $currency) {
    // $currency->curr.. etc
]