如何在php中从XML循环foreach获取数组数据
我有如下XML格式的货币输出:如何在php中从XML循环foreach获取数组数据,php,xml,Php,Xml,我有如下XML格式的货币输出: <ValCurs Date="13.04.2019" name="Foreign Currency Market"> <Valute ID="R01010"> <NumCode>036</NumCode> <CharCode>AUD</CharCode> <Nominal>1</Nominal> <Name&
<ValCurs Date="13.04.2019" name="Foreign Currency Market">
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>46,0781</Value>
</Valute>
<Valute ID="R01020A">
<NumCode>944</NumCode>
<CharCode>AZN</CharCode>
<Nominal>1</Nominal>
<Name>Азербайджанский манат</Name>
<Value>38,0295</Value>
</Valute>
</ValCurs>
结果是货币为0这很简单:
$s = '<ValCurs Date="13.04.2019" name="Foreign Currency Market">
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>46,0781</Value>
</Valute>
<Valute ID="R01020A">
<NumCode>944</NumCode>
<CharCode>AZN</CharCode>
<Nominal>1</Nominal>
<Name>Азербайджанский манат</Name>
<Value>38,0295</Value>
</Valute>
</ValCurs>';
// Note, that `simplexml_load_string` uses a STRING,
// if `$url` is url to some resource, first get data from
// this resource and then load this data to SimpleXML
$xml = simplexml_load_string($s) or die ("error cannot create object");
foreach($xml as $node){
echo $node->Name;
echo "<br><br>";
echo $node->Value;
echo "<br><br>";
echo $node['ID'];
echo "<br><br>";
}
$s='1!'
036
澳元
1.
Австралийский доллар
46,0781
944
AZN
1.
Азербайджанский манат
38,0295
';
//注意,`simplexml_load_string`使用字符串,
//如果“$url”是指向某个资源的url,请首先从
//然后将此数据加载到SimpleXML
$xml=simplexml_load_string($s)或die(“错误无法创建对象”);
foreach($xml作为$node){
echo$node->Name;
回声“
”;
echo$node->Value;
回声“
”;
echo$node['ID'];
回声“
”;
}
小提琴。步骤: 1) 通过
simplexml\u load\u string()将XML转换为字符串
2) json\u encode()
用于解码的字符串
3) json_deocde():以数组形式返回
4) 环路阵列
5) 将循环值附加到新创建的数组
Array
(
[0] => Array
(
[NumCode] => 036
[CharCode] => AUD
[Nominal] => 1
[Name] => Австралийский доллар
[Value] => 46,0781
)
[1] => Array
(
[NumCode] => 944
[CharCode] => AZN
[Nominal] => 1
[Name] => Азербайджанский манат
[Value] => 38,0295
)
)
您的意思是,给定XML字符串,您需要一个函数来提取名称、值和值,只需提供ID即可?是的,这正是我要问的。我还收到消息“Undefined offset:0”@G'ulomjonMalikov错误,您有更多解决方案。提前谢谢!使用json\u decode(json\u encode())
是一种浪费时间的行为,使用SimpleXML非常简单-为什么要费心去做这些额外的步骤呢?如果他们改变SimpleXML内部的工作方式,这很容易出问题。使用object2array()
对我来说不是一个好选择。@NigelRen这个问题还有待回答,我不会阻止你,你能不能…:-)由于u_mulder发布的答案是我所建议的,因此我对其进行了升级投票,而不是发布几乎相同的代码。是的,在我看到mulder的答案后,我理解了,但我期望得到与您不同的答案,这就是为什么…!:-)我们互相回答,否则我就辞职了。
<?php
function object2array($object) { return @json_decode(@json_encode($object),1); }
$xmldata = <<<XML
<ValCurs Date="13.04.2019" name="Foreign Currency Market">
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>46,0781</Value>
</Valute>
<Valute ID="R01020A">
<NumCode>944</NumCode>
<CharCode>AZN</CharCode>
<Nominal>1</Nominal>
<Name>Азербайджанский манат</Name>
<Value>38,0295</Value>
</Valute>
</ValCurs>
XML;
$xml = simplexml_load_string($xmldata) or die ("error cannot create object");
$xml_array=object2array($xml);
echo'<pre>';
print_r($xml_array);
foreach($xml_array['Valute'] as $key=>$value){
echo $value['@attributes']['ID'].'<br>';
echo $value['Name'].'<br>';
echo $value['Value'].'<br>';
}
R01010
Австралийский доллар
R01020A
Азербайджанский манат
<?php
$xml = '<?xml version = "1.0" encoding = "utf-8"?>
<ValCurs Date="13.04.2019" name="Foreign Currency Market">
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>46,0781</Value>
</Valute>
<Valute ID="R01020A">
<NumCode>944</NumCode>
<CharCode>AZN</CharCode>
<Nominal>1</Nominal>
<Name>Азербайджанский манат</Name>
<Value>38,0295</Value>
</Valute>
</ValCurs>';
$arr = [];
$array = json_decode(json_encode(simplexml_load_string($xml)),true);
if ( ! empty($array['Valute'])) {
$i=0;
foreach ($array['Valute'] as $elem) {
$arr[$i]['NumCode'] = $elem['NumCode'];
$arr[$i]['CharCode'] = $elem['CharCode'];
$arr[$i]['Nominal'] = $elem['Nominal'];
$arr[$i]['Name'] = $elem['Name'];
$arr[$i]['Value'] = $elem['Value'];
++$i;
}
}
echo '<pre>';print_r($arr);echo '</pre>';
Array
(
[0] => Array
(
[NumCode] => 036
[CharCode] => AUD
[Nominal] => 1
[Name] => Австралийский доллар
[Value] => 46,0781
)
[1] => Array
(
[NumCode] => 944
[CharCode] => AZN
[Nominal] => 1
[Name] => Азербайджанский манат
[Value] => 38,0295
)
)