我尝试for从XML到JSON加载的循环XML文件



我尝试foreach循环XML文件。首先,它从XML文件转到JSON,然后转到我尝试使用foreach函数(带有Zend Framework(循环的PHP数组。

问题是XML文件只有一项活动,然后整个代码不起作用,而XML文件则有多个活动,然后代码可以工作:

<?php
header('Content-type: application/javascript; charset=utf-8');
set_include_path(implode(PATH_SEPARATOR, array(
    'library',
    get_include_path()
)));
require_once('Zend/Loader.php');
Zend_Loader::loadClass('Zend_Loader_Autoloader');
$autoloader = Zend_Loader_Autoloader::getInstance();
$xmlStringContents = file_get_contents("activities.xml");
$jsonContents = Zend_Json::fromXml($xmlStringContents, true);
$decodedValues = Zend_Json::decode($jsonContents);
$project[0] = array("key" => "", "value" => "Please select...");
$i = 1;
foreach ($decodedValues['Envelope'] as $key => $value) {
  foreach ($value as $keyEnvelope => $valueEnvelope) {
    if (is_array($valueEnvelope)) {
        foreach ($valueEnvelope['EFIAIFProjActivity'] as $keyEFIAIFProjTable => $valueEFIAIFProjTable) {
            if (is_array($valueEFIAIFProjTable)) {
                foreach ($valueEFIAIFProjTable as $projectValue) {
                    if (isset($_GET['project'])) {
                        if ($_GET['project']==$projectValue['Project']['ProjId'] && $_GET['project'] != "") {
                            $project[$i] = array("key" => $projectValue['smmActivities']['ActivityNumber'], "value" => $projectValue['smmActivities']['PSADescription']);
                            $i++;
                        }
                    }
                }
            }
        }
    }
  }
}
if ($i==1) {
    $project[$i] = array("key" => "NO_ACTIVITY_000001", "value" => "No Activity");
}
$projects = array("values" => $project);
if (isset($_GET['callback'])) {
echo $_GET['callback']."(";
echo Zend_Json::encode($projects);
echo ")";
}

我需要像这样的方式使此代码工作,如果动态下拉菜单 project 选定的项目在Atlassian Jira和Tempo附加组件中没有任何活动。如果选定的项目在XML文件中有一个或多个活动,则这些活动的活动下拉菜单。

简单的解决方案是不要将XML转换为JSON。SimpleXML允许您在XML DOM上使用对象/可遍历语法。因此

当前解决方案的主要区别是您必须使用对象属性语法,而不是数组语法。

另一件事是您的代码看起来像读肥皂。虽然SOAP使用XML语法进行序列化,但它不仅仅是" XML"。您更好地使用特定的肥皂库。

如果XML具有单节点,则Zend Framework将其转换为JSON作为钥匙值对。

如果XML具有多个节点,则Zend Framework将其转换为JSON数组。

您可以通过两种方式处理此操作。

  1. 检查其数组是否循环,否则通过其键

  2. 直接访问值
  3. 如果节点不是数组,请在其解码后将其转换为数组。

最新更新