将XML转换为Json PHP

将XML转换为Json PHP,php,json,xml,Php,Json,Xml,我正在尝试在不使用JSON_encode的情况下将XML转换为JSON。我已经编写了一些PHP代码来转换它,但它不能正常工作。显示的是数据标题,但不是数据本身。有点难以解释,但请你自己运行它,你会明白我的意思 这是一项潜在工作的任务,他们说不要使用json_编码。这是面试过程的一部分。下面是我的代码: $data = '<data> <product> <priipCloudProductTemplate>otc<

我正在尝试在不使用JSON_encode的情况下将XML转换为JSON。我已经编写了一些PHP代码来转换它,但它不能正常工作。显示的是数据标题,但不是数据本身。有点难以解释,但请你自己运行它,你会明白我的意思

这是一项潜在工作的任务,他们说不要使用json_编码。这是面试过程的一部分。下面是我的代码:

$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