3

我需要将来自 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 ) 页面上的文本区域中,然后如果您检查 xmlraw 下的元素:您可以看到原始 xml 字符串已回显 -但是,在 xml: 下面什么都没有,foreach 也没有输出任何东西。

这是一个 jsFiddle,因此您可以看到 HTML/JS——它实际上并没有做任何事情,因为它不能 ajax 到 PHP 页面——所以我在上面包含了 PHP 版本来测试。http://jsfiddle.net/tsdexter/EDqQB/

有任何想法吗?

4

1 回答 1

1

几个问题,可能构成答案,也可能不构成答案,但需要比评论更多的空间。

  1. 你为什么要urldecode$_POST变量上运行?PHP 应该为您执行此操作,除非您在某处双重转义。
  2. 为什么要加载到 DOM 中,然后再加载到 SimpleXML?我知道您说您尝试不使用,但他们在下面使用相同的 XML 解析器,因此除了引入更多混乱之外,这对您没有任何帮助。
  3. var_dump(simplexml_load_string($rawxml))给你什么?我的猜测是 FALSE,这意味着错误。在这种情况下,请检查您是否打开了警告 ( error_reporting(E_ALL); ini_set('display_errors', '1');) 并关闭了详细的 XML 错误处理libxml_use_internal_errors(false);( )。
  4. 如果它确实为您提供了 SimpleXMLElement 对象,请不要花太长时间查看var_dump输出。请改用其中一种调试功能
于 2012-12-20T23:26:13.890 回答