Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用json_解码从文本文件生成XML_Php_Json_Xml_Rss - Fatal编程技术网

Php 使用json_解码从文本文件生成XML

Php 使用json_解码从文本文件生成XML,php,json,xml,rss,Php,Json,Xml,Rss,我有这个文本文件(namelist.txt): <?php $xml = new DOMDocument(); $names = json_decode(file_get_contents('namelist.txt')); foreach ($names as $name) { $xml_name = $xml->createElement($name); } $xml->save("rss.xml"); ?> {“0”:“Tony先生测试”,“1”:“T

我有这个文本文件(namelist.txt):

<?php
$xml = new DOMDocument();
$names = json_decode(file_get_contents('namelist.txt'));
foreach ($names as $name) 
{
    $xml_name = $xml->createElement($name);

}
$xml->save("rss.xml");
?>
{“0”:“Tony先生测试”,“1”:“Tina女士测试”}

我尝试将其转换为XML:

<?php
$xml = new DOMDocument();
$names = json_decode(file_get_contents('namelist.txt'));
foreach ($names as $name) 
{
    $xml_name = $xml->createElement($name);

}
$xml->save("rss.xml");
?>
createElement($name);
}
$xml->save(“rss.xml”);
?>
我得到以下错误:

<?php
$xml = new DOMDocument();
$names = json_decode(file_get_contents('namelist.txt'));
foreach ($names as $name) 
{
    $xml_name = $xml->createElement($name);

}
$xml->save("rss.xml");
?>
致命错误:未捕获的异常“DomeException”,消息“Invalid” C:\xampp\htdocs\xibo\rss.php:6堆栈跟踪中的字符错误:#0 C:\xampp\htdocs\xibo\rss.php(6):DOMDocument->createElement('Tony先生 在第6行的C:\xampp\htdocs\xibo\rss.php中抛出Te…')#1{main}

甚至有可能这样吗

编辑1:

<?php
$xml = new DOMDocument();
$names = json_decode(file_get_contents('namelist.txt'));
foreach ($names as $name) 
{
    $xml_name = $xml->createElement($name);

}
$xml->save("rss.xml");
?>
通过@spiky尝试了一个解决方案,但结果我得到了一个空白页:

<?php 
$obj=('namelist.txt');
function json_to_xml($obj){
  $str = "";
  if(is_null($obj))
    return "<null/>";
  elseif(is_array($obj)) {
      //a list is a hash with 'simple' incremental keys
    $is_list = array_keys($obj) == array_keys(array_values($obj));
    if(!$is_list) {
      $str.= "<hash>";
      foreach($obj as $k=>$v)
        $str.="<item key=\"$k\">".json_to_xml($v)."</item>".CRLF;
      $str .= "</hash>";
    } else {
      $str.= "<list>";
      foreach($obj as $v)
        $str.="<item>".json_to_xml($v)."</item>".CRLF;
      $str .= "</list>";
    }
    return $str;
  } elseif(is_string($obj)) {
    return htmlspecialchars($obj) != $obj ? "<![CDATA[$obj]]>" : $obj;
  } elseif(is_scalar($obj))
    return $obj;
  else
    throw new Exception("Unsupported type $obj");
}
?>
$v)
$str.=“”.json_to_xml($v)。“”.CRLF;
$str=”;
}否则{
$str.=”;
foreach($obj作为$v)
$str.=“”.json_to_xml($v)。“”.CRLF;
$str=”;
}
返回$str;
}elseif(is_字符串($obj)){
返回htmlspecialchars($obj)!=$obj?“:$obj;
}elseif(is_标量($obj))
返回$obj;
其他的
抛出新异常(“不支持的类型$obj”);
}
?>

如果您解码的JSON是一个具有两个属性的对象(
0
1

输出:

object(stdClass)#1 (2) {
  ["0"]=>
  string(12) "Mr Tony Test"
  ["1"]=>
  string(13) "Ms Tina Testy"
}
Fatal error: Uncaught exception 'DOMException' with message 
'Invalid Character Error' in /tmp/...
<?xml version="1.0"?>
<names>
  <name>Mr Tony Test</name>
  <name>Ms Tina Testy</name>
</names>
<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <item>
      <title>Mr Tony Test</title>
    </item>
    <item>
      <title>Ms Tina Testy</title>
    </item>
  </channel>
</rss>
您迭代这些属性,并将这些值用作元素名称。但它们不是有效的名称。下面是一个产生错误的静态示例:

$document = new DOMDocument();
$document->createElement('name with spaces');
输出:

object(stdClass)#1 (2) {
  ["0"]=>
  string(12) "Mr Tony Test"
  ["1"]=>
  string(13) "Ms Tina Testy"
}
Fatal error: Uncaught exception 'DOMException' with message 
'Invalid Character Error' in /tmp/...
<?xml version="1.0"?>
<names>
  <name>Mr Tony Test</name>
  <name>Ms Tina Testy</name>
</names>
<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <item>
      <title>Mr Tony Test</title>
    </item>
    <item>
      <title>Ms Tina Testy</title>
    </item>
  </channel>
</rss>
因此,您需要确保生成有效的XML。他喜欢这样:

$json = json_decode('{"0":"Mr Tony Test","1":"Ms Tina Testy"}');

$document = new DOMDocument();
$names = $document->appendChild(
  $document->createElement('names')
);
foreach ($json as $value) {
  $names
    ->appendChild($document->createElement('name'))
    ->appendChild($document->createTextNode($value));
}

$document->formatOutput = TRUE;
echo $document->saveXml();
输出:

object(stdClass)#1 (2) {
  ["0"]=>
  string(12) "Mr Tony Test"
  ["1"]=>
  string(13) "Ms Tina Testy"
}
Fatal error: Uncaught exception 'DOMException' with message 
'Invalid Character Error' in /tmp/...
<?xml version="1.0"?>
<names>
  <name>Mr Tony Test</name>
  <name>Ms Tina Testy</name>
</names>
<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <item>
      <title>Mr Tony Test</title>
    </item>
    <item>
      <title>Ms Tina Testy</title>
    </item>
  </channel>
</rss>
输出:

object(stdClass)#1 (2) {
  ["0"]=>
  string(12) "Mr Tony Test"
  ["1"]=>
  string(13) "Ms Tina Testy"
}
Fatal error: Uncaught exception 'DOMException' with message 
'Invalid Character Error' in /tmp/...
<?xml version="1.0"?>
<names>
  <name>Mr Tony Test</name>
  <name>Ms Tina Testy</name>
</names>
<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <item>
      <title>Mr Tony Test</title>
    </item>
    <item>
      <title>Ms Tina Testy</title>
    </item>
  </channel>
</rss>

Tony Test先生
蒂娜·易怒女士

Go-through:显然我无法在我的环境中安装XML序列化程序。我尝试了@spiky的答案,但是我得到了一个空白页。谢谢你详细的回答!作品完美:-)