Php 使用json_解码从文本文件生成XML
我有这个文本文件(namelist.txt):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
<?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的答案,但是我得到了一个空白页。谢谢你详细的回答!作品完美:-)