将XML转换为Json PHP
我正在尝试在不使用JSON_encode的情况下将XML转换为JSON。我已经编写了一些PHP代码来转换它,但它不能正常工作。显示的是数据标题,但不是数据本身。有点难以解释,但请你自己运行它,你会明白我的意思 这是一项潜在工作的任务,他们说不要使用json_编码。这是面试过程的一部分。下面是我的代码:将XML转换为Json PHP,php,json,xml,Php,Json,Xml,我正在尝试在不使用JSON_encode的情况下将XML转换为JSON。我已经编写了一些PHP代码来转换它,但它不能正常工作。显示的是数据标题,但不是数据本身。有点难以解释,但请你自己运行它,你会明白我的意思 这是一项潜在工作的任务,他们说不要使用json_编码。这是面试过程的一部分。下面是我的代码: $data = '<data> <product> <priipCloudProductTemplate>otc<
$data = '<data>
<product>
<priipCloudProductTemplate>otc</priipCloudProductTemplate>
<priipCloudProductType>fxSwap</priipCloudProductType>
<productIdentifier>RBI_fxSwap_EURUSD_long_1Y2D_EUR</productIdentifier>
</product>
<manufacturer>
<id>rbi</id>
<nameLong>Raiffeisen Bank International AG</nameLong>
<nameShort>RBI</nameShort>
<address>Am Stadtpark 9, 1030 Wien, Austria</address>
<telephoneNumber>+43 1 71707 0</telephoneNumber>
<website>http://www.rbinternational.com</website>
<email>complaints@rbinternational.com</email>
</manufacturer>
<document>
<type>final</type>
</document>
<properties>
<includeEarlyRedemptionInExtraordinaryEventsAlert>true</includeEarlyRedemptionInExtraordinaryEventsAlert>
</properties>
<tradeDate>2018-01-18</tradeDate>
<effectiveDate>2018-01-20</effectiveDate>
<fxSwap>
<holder>client</holder>
<currencyPair>EURUSD</currencyPair>
<notionalAmount>1000000</notionalAmount>
<notionalAmountCurrency>EUR</notionalAmountCurrency>
<terminationDate>2019-01-20</terminationDate>
<forwardRate>
<value>1.25620</value>
</forwardRate>
<spotRate>
<value>1.2207</value>
</spotRate>
</fxSwap>
<costs>
<entryCosts>0.0025</entryCosts>
</costs>
<riskMeasures version="v1.0">
<sriRelatedValues>
<valueAtRisk>0</valueAtRisk>
<valueAtRiskEquivalentVolatility>0</valueAtRiskEquivalentVolatility>
<mrm>7</mrm>
<crm>2</crm>
<sri>7</sri>
</sriRelatedValues>
<performanceScenariosRelatedValues>
<positiveScenarioPayoutRHP>11139.633068665</positiveScenarioPayoutRHP>
<positiveScenarioActualReturnRHP>0.1139633069</positiveScenarioActualReturnRHP>
<positiveScenarioAverageReturnPerYearRHP>0.114276</positiveScenarioAverageReturnPerYearRHP>
<positiveScenarioPayoutIHP1>null</positiveScenarioPayoutIHP1>
<positiveScenarioActualReturnIHP1>null</positiveScenarioActualReturnIHP1>
<positiveScenarioAverageReturnPerYearIHP1>null</positiveScenarioAverageReturnPerYearIHP1>
<positiveScenarioPayoutIHP2>null</positiveScenarioPayoutIHP2>
<positiveScenarioActualReturnIHP2>null</positiveScenarioActualReturnIHP2>
<positiveScenarioAverageReturnPerYearIHP2>null</positiveScenarioAverageReturnPerYearIHP2>
<moderateScenarioPayoutRHP>9984.9790016645</moderateScenarioPayoutRHP>
<moderateScenarioActualReturnRHP>-0.0015020998</moderateScenarioActualReturnRHP>
<moderateScenarioAverageReturnPerYearRHP>-0.00150623</moderateScenarioAverageReturnPerYearRHP>
<moderateScenarioPayoutIHP1>null</moderateScenarioPayoutIHP1>
<moderateScenarioActualReturnIHP1>null</moderateScenarioActualReturnIHP1>
<moderateScenarioAverageReturnPerYearIHP1>null</moderateScenarioAverageReturnPerYearIHP1>
<moderateScenarioPayoutIHP2>null</moderateScenarioPayoutIHP2>
<moderateScenarioActualReturnIHP2>null</moderateScenarioActualReturnIHP2>
<moderateScenarioAverageReturnPerYearIHP2>null</moderateScenarioAverageReturnPerYearIHP2>
<negativeScenarioPayoutRHP>8955.6992819847</negativeScenarioPayoutRHP>
<negativeScenarioActualReturnRHP>-0.1044300718</negativeScenarioActualReturnRHP>
<negativeScenarioAverageReturnPerYearRHP>-0.104717</negativeScenarioAverageReturnPerYearRHP>
<negativeScenarioPayoutIHP1>null</negativeScenarioPayoutIHP1>
<negativeScenarioActualReturnIHP1>null</negativeScenarioActualReturnIHP1>
<negativeScenarioAverageReturnPerYearIHP1>null</negativeScenarioAverageReturnPerYearIHP1>
<negativeScenarioPayoutIHP2>null</negativeScenarioPayoutIHP2>
<negativeScenarioActualReturnIHP2>null</negativeScenarioActualReturnIHP2>
<negativeScenarioAverageReturnPerYearIHP2>null</negativeScenarioAverageReturnPerYearIHP2>
<stressScenarioPayoutRHP>6841.9699464563</stressScenarioPayoutRHP>
<stressScenarioActualReturnRHP>-0.3158030054</stressScenarioActualReturnRHP>
<stressScenarioAverageReturnPerYearRHP>-0.316671</stressScenarioAverageReturnPerYearRHP>
<stressScenarioPayoutIHP1>null</stressScenarioPayoutIHP1>
<stressScenarioActualReturnIHP1>null</stressScenarioActualReturnIHP1>
<stressScenarioAverageReturnPerYearIHP1>null</stressScenarioAverageReturnPerYearIHP1>
<stressScenarioPayoutIHP2>null</stressScenarioPayoutIHP2>
<stressScenarioActualReturnIHP2>null</stressScenarioActualReturnIHP2>
<stressScenarioAverageReturnPerYearIHP2>null</stressScenarioAverageReturnPerYearIHP2>
</performanceScenariosRelatedValues>
</riskMeasures>
<costOutputs>
<costsOverTime>
<totalCostsRHP>
<value>24.4219183409</value>
</totalCostsRHP>
<totalCostsIHP1>
<value>null</value>
</totalCostsIHP1>
<totalCostsIHP2>
<value>null</value>
</totalCostsIHP2>
<reductionInActualYieldRHP>
<value>0.0024421918</value>
</reductionInActualYieldRHP>
<reductionInActualYieldIHP1>
<value>null</value>
</reductionInActualYieldIHP1>
<reductionInActualYieldIHP2>
<value>null</value>
</reductionInActualYieldIHP2>
<reductionInYieldRHP>
<value>0.0024489008</value>
</reductionInYieldRHP>
<reductionInYieldIHP1>
<value>null</value>
</reductionInYieldIHP1>
<reductionInYieldIHP2>
<value>null</value>
</reductionInYieldIHP2>
</costsOverTime>
<compositionOfCosts>
<actualEntryCosts>
<value>0.0024421918</value>
</actualEntryCosts>
<actualOtherRecurringCostsPA>
<value>null</value>
</actualOtherRecurringCostsPA>
<actualExitCosts>
<value>0</value>
</actualExitCosts>
<entryCosts>
<value>0.0024489008</value>
</entryCosts>
<otherRecurringCostsPA>
<value>null</value>
</otherRecurringCostsPA>
<exitCosts>
<value>0</value>
</exitCosts>
</compositionOfCosts>
</costOutputs>
</data>';
function json_encoded($a=false)
{
if (is_null($a)) return 'null';
if ($a === false) return 'false';
if ($a === true) return 'true';
if (is_scalar($a))
{
if (is_float($a))
{
// Always use "." for floats.
return floatval(str_replace(",", ".", strval($a)));
}
if (is_string($a))
{
static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
}
if (is_int($a)) { return '"'. $a . '"'; } return $a;
}
$isList = true;
for ($i = 0, reset($a); $i < count($a); $i++, next($a))
{
if (key($a) !== $i)
{
$isList = false;
break;
}
}
$result = array();
if ($isList)
{
foreach ($a as $v) $result[] = json_encoded($v);
return '[' . join(',', $result) . ']';
}
else
{
foreach ($a as $k => $v){ if(is_numeric($k)){ $result[] = '"'.json_encoded($k).'":'.json_encoded($v); }else{ $result[] = json_encoded($k).':'.json_encoded($v); } };
return '{' . join(',', $result) . '}';
}
}
libxml_use_internal_errors(true);
$data = simplexml_load_string($data) or die ("error found");
//if statement to check if data can be loaded
if($data === false){
echo "Unable to load the data";
foreach ($libxml_get_errors() as $error){
echo "<br>", $error->message;
}
}
else{
//below is my code to execute the above function
$json = json_encoded($data);
echo "<pre>";
print_r($json);
echo "</pre>";
}
$data='1!'
非处方药
外汇掉期
印度储备银行外汇掉期欧元美元多头日元欧元
打点
莱夫艾森国际银行集团
打点
上午9点,奥地利维也纳1030
+43 1 71707 0
http://www.rbinternational.com
complaints@rbinternational.com
最终的
真的
2018-01-18
2018-01-20
客户
欧元兑美元
1000000
欧元
2019-01-20
1.25620
1.2207
0.0025
0
0
7.
2.
7.
11139.633068665
0.1139633069
0.114276
无效的
无效的
无效的
无效的
无效的
无效的
9984.9790016645
-0.0015020998
-0.00150623
无效的
无效的
无效的
无效的
无效的
无效的
8955.6992819847
-0.1044300718
-0.104717
无效的
无效的
无效的
无效的
无效的
无效的
6841.9699464563
-0.3158030054
-0.316671
无效的
无效的
无效的
无效的
无效的
无效的
24.4219183409
无效的
无效的
0.0024421918
无效的
无效的
0.0024489008
无效的
无效的
0.0024421918
无效的
0
0.0024489008
无效的
0
';
函数json_encoded($a=false)
{
如果(is_null($a))返回“null”;
如果($a==false)返回“false”;
if($a==true)返回“true”;
如果(是标量($a))
{
如果(是浮动($a))
{
//浮动时始终使用“.”。
返回floatval(str_替换(“,”,“,”,strval($a));
}
如果(是字符串($a))
{
静态$jsonReplaces=array(数组(“\\\”、“/”、“\n”、“\t”、“\r”、“\b”、“\f”、“““”)、数组(“\\\”、“\\\/”、“\\n”、“\\t”、“\\r”、“\\b”、“\\f”、“\”);
返回“'.str_replace($jsonReplaces[0],$jsonReplaces[1],$a)。”;
}
if(is_int($a)){return'.$a'.''.}返回$a;
}
$isList=true;
对于($i=0,重置($a);$i$v){if(is_numeric($k)){$result[]='''.json_encoded($k)。“:'.json_encoded($v);}否则{$result[]=json_encoded($k)。:'.json_encoded($v);};
返回“{”.join(“,”,$result)。“}”;
}
}
libxml\u使用\u内部错误(true);
$data=simplexml_load_string($data)或die(“发现错误”);
//if语句检查是否可以加载数据
如果($data==false){
echo“无法加载数据”;
foreach($libxml\u get\u errors()作为$error){
回显“
”,$error->消息;
}
}
否则{
//下面是我执行上述函数的代码
$json=json_编码($data);
回声“;
打印(json);
回声“;
}
您可以尝试以下方法:
@J.Doe的可能副本我也不允许使用decode。我还需要像上面那样用纯PHP进行解码。
//xml->array:
$arr=base64_encode(array('note'=>'Tove','from'=>'Jani')); //head........
$json_arr='{"arr":"'.$arr.'"}'; //json
$ARR=json_decode($json_arr,1); //array
$Bascode=base64_decode($ARR['arr']); //base64_decode value