Php 使用DomDocument在foreach之后访问XML

Php 使用DomDocument在foreach之后访问XML,php,xml,Php,Xml,我正在使用DomDocument访问XML数据,但无法访问 $xmlstring =<<<XML <CcyTbl> <CcyNtry> <CtryNm>AFGHANISTAN</CtryNm> <CcyNm>Afghani</CcyNm> <Ccy>AFN</Ccy> <CcyNbr>971</CcyNbr&g

我正在使用DomDocument访问XML数据,但无法访问

    $xmlstring =<<<XML
    <CcyTbl>
    <CcyNtry>
    <CtryNm>AFGHANISTAN</CtryNm>
    <CcyNm>Afghani</CcyNm>
    <Ccy>AFN</Ccy>
    <CcyNbr>971</CcyNbr>
    <CcyMnrUnts>2</CcyMnrUnts>
    </CcyNtry>
    <CcyNtry>
    <CtryNm>ÅLAND ISLANDS</CtryNm>
    <CcyNm>Euro</CcyNm>
    <Ccy>EUR</Ccy>
    <CcyNbr>978</CcyNbr>
    <CcyMnrUnts>2</CcyMnrUnts>
    </CcyNtry>
    <CcyNtry>
    <CtryNm>ALBANIA</CtryNm>
    <CcyNm>Lek</CcyNm>
    <Ccy>ALL</Ccy>
    <CcyNbr>008</CcyNbr>
    <CcyMnrUnts>2</CcyMnrUnts>
    </CcyNtry>
    <CcyNtry>
    <CtryNm>ALGERIA</CtryNm>
    <CcyNm>Algerian Dinar</CcyNm>
    <Ccy>DZD</Ccy>
    <CcyNbr>012</CcyNbr>
    <CcyMnrUnts>2</CcyMnrUnts>
    </CcyNtry>
    <CcyNtry>
    <CtryNm>AMERICAN SAMOA</CtryNm>
    <CcyNm>US Dollar</CcyNm>
    <Ccy>USD</Ccy>
    <CcyNbr>840</CcyNbr>
    <CcyMnrUnts>2</CcyMnrUnts>
    </CcyNtry>
    </CcyTbl>
    XML;
    $doc = new DOMDocument('1.0', 'UTF-8');
    $doc->loadXML( utf8_encode($xmlstring));
    $countries = $doc->getElementsByTagName('CcyNtry');
    foreach($countries as $country){
    print_r($country->nodeValue);die();

    }
但我想访问CtryNm、CcyNm、Ccy等单个项目

我试图进入

    $doc = new DOMDocument('1.0', 'UTF-8');
    $doc->loadXML( utf8_encode($xmlstring));
    $countries = $doc->getElementsByTagName('CcyNtry');
    foreach($countries as $country){
      echo $country->CtryNm;die();

    }
未定义的属性:DomeElement::$CtryNm


试试这个。从下面可以访问XML中的所有元素

$simple = "<CcyTbl>
<CcyNtry>
<CtryNm>AFGHANISTAN</CtryNm>
<CcyNm>Afghani</CcyNm>
<Ccy>AFN</Ccy>
<CcyNbr>971</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
<CcyNtry>
<CtryNm>ÅLAND ISLANDS</CtryNm>
<CcyNm>Euro</CcyNm>
<Ccy>EUR</Ccy>
<CcyNbr>978</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
<CcyNtry>
<CtryNm>ALBANIA</CtryNm>
<CcyNm>Lek</CcyNm>
<Ccy>ALL</Ccy>
<CcyNbr>008</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
<CcyNtry>
<CtryNm>ALGERIA</CtryNm>
<CcyNm>Algerian Dinar</CcyNm>
<Ccy>DZD</Ccy>
<CcyNbr>012</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
<CcyNtry>
<CtryNm>AMERICAN SAMOA</CtryNm>
<CcyNm>US Dollar</CcyNm>
<Ccy>USD</Ccy>
<CcyNbr>840</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
</CcyTbl>";
echo "<pre>";
print_r(new SimpleXMLElement($simple));
$simple=”
阿富汗
阿富汗人
AFN
971
2.
奥兰群岛
欧元
欧元
978
2.
阿尔巴尼亚
沥
全部的
008
2.
阿尔及利亚
阿尔及利亚第纳尔
DZD
012
2.
美属萨摩亚
美元
美元
840
2.
";
回声“;
打印(新的simplexmlement($simple));
$doc=新的DOMDocument('1.0','UTF-8');
$doc->loadXML(utf8_编码($xmlstring));
$countries=$doc->firstChild->getElementsByTagName('CcyNtry');
foreach($国家作为$国家){
echo$country->getElementsByTagName('CtryNm')->item(0)->nodeValue。“
”; }

这将获得所有的
CtryNm
。只需将
CtryNm
替换为要检索的标记的名称即可。不过,您可能应该研究一下。

如果您想将XML节点作为对象属性访问,那么使用DOMDocument而不是DOMDocument将更容易使用

以下是XML字符串的示例:


同样,您可以访问XML的其他节点作为对象属性。

您能提供完整的代码吗?第一个示例包含一个解析错误;到第一行是的,您需要尝试这个$countries=$doc->getElementsByTagName('CcyTbl');不能使用DOM,请尝试simplexml。
$simple = "<CcyTbl>
<CcyNtry>
<CtryNm>AFGHANISTAN</CtryNm>
<CcyNm>Afghani</CcyNm>
<Ccy>AFN</Ccy>
<CcyNbr>971</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
<CcyNtry>
<CtryNm>ÅLAND ISLANDS</CtryNm>
<CcyNm>Euro</CcyNm>
<Ccy>EUR</Ccy>
<CcyNbr>978</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
<CcyNtry>
<CtryNm>ALBANIA</CtryNm>
<CcyNm>Lek</CcyNm>
<Ccy>ALL</Ccy>
<CcyNbr>008</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
<CcyNtry>
<CtryNm>ALGERIA</CtryNm>
<CcyNm>Algerian Dinar</CcyNm>
<Ccy>DZD</Ccy>
<CcyNbr>012</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
<CcyNtry>
<CtryNm>AMERICAN SAMOA</CtryNm>
<CcyNm>US Dollar</CcyNm>
<Ccy>USD</Ccy>
<CcyNbr>840</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
</CcyTbl>";
echo "<pre>";
print_r(new SimpleXMLElement($simple));
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->loadXML(utf8_encode($xmlstring));

$countries = $doc->firstChild->getElementsByTagName('CcyNtry');

foreach($countries as $country){
    echo $country->getElementsByTagName('CtryNm')->item(0)->nodeValue . '<br />';
}
$xml = simplexml_load_string($xmlstring);
foreach ($xml->CcyNtry as $country) {
    echo $country->CtryNm . "\n";
}