Php 使用DomDocument在foreach之后访问XML
我正在使用DomDocument访问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
$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";
}