我需要将textarea输入中的XML数据发布到PHP,这样我就可以解析它并输出一个表。
我尝试了一些方法,但似乎都没有。
目前我有这个:
jQuery('#btnRegistrarXML').live('click', function(){
var xml;
if (jQuery('#txtRegXML').val() == ""){
AddMsg('You must paste XML from the excel export into the textarea.', 'error');
} else {
jQuery.post('registrar-xml-to-table.php', {xml:escape(jQuery('#txtRegXML').val())}, function(data){
jQuery('#regXMLasTable').empty();
jQuery('#regXMLasTable').append(data);
});
}
displayMsgs();
});
PHP是:
$xmlraw = urldecode($_POST['xml']);
$dom = new DOMDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML($xmlraw);
$dom->formatOutput = TRUE;
$xmlstr = $dom->saveXml();
$xml = simplexml_load_string($xmlstr);
echo "<p>xmlraw:</p>";
echo $xmlraw;
echo "<p>xml:</p>";
echo $xml;
foreach ($xml->document as $doc) {
echo '<p class="alert alert-error">'.$doc->title.'</p>';
}
第一个echo $ xmlraw正在运行 - 它在一行中输出所有XML字符串 - 帖子正在通过正确的方式发送数据。
第二个echo $ xml没有输出任何东西,foreach也没有输出任何东西 - 某些东西在PHP中不起作用
我也尝试将$ xmlraw直接加载到simplexml_load_string($ xmlraw)中,但它不起作用 - 我假设因为它没有很好地形成?
我用来测试的XML是:
<?xml version="1.0"?>
<document>
<title>
Foobar
</title>
</document>
您可以将XML粘贴到此(http://tsdexter.com/webservice-testing/programs-list.php)页面上的textarea中,然后检查xmlraw下面的元素:您可以看到原始xml字符串已被回显 - 但是,在xml下面:没有任何内容foreach也没有输出任何东西。
这是一个jsFiddle,所以你可以看到HTML / JS - 它实际上并没有做任何事情,因为它不能ajax到PHP页面 - 所以我包括上面的PHP版本进行测试。 http://jsfiddle.net/tsdexter/EDqQB/
有什么想法吗?
答案 0 :(得分:0)
一些问题,可能会或可能不会构成答案,但需要比评论更多的空间。
urldecode
变量上运行$_POST
? PHP应该为你做这件事,除非你在某个地方双重逃避它。 var_dump(simplexml_load_string($rawxml))
给你什么?我的猜测是假的,这意味着错误。在这种情况下,请检查您是否已启用警告(error_reporting(E_ALL); ini_set('display_errors', '1');
)并关闭detailed XML error handling(libxml_use_internal_errors(false);
)。var_dump
输出。请改为one of these debugging functions。