当前位置: 首页 > 知识库问答 >
问题:

如何将POST数据加载到SimpleXML中?

年高洁
2023-03-14

我需要将来自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>';
}

第一个回声$xmlraw正在工作——它在一行中输出XML字符串——帖子正在正确地发送数据。

第二个echo$xml不输出任何东西,Foreach也不输出任何东西——在PHP中有些东西不起作用

我还尝试将$xmlraw直接加载到simplexml_load_字符串($xmlraw)中,但它不起作用——我假设是因为它的格式不好?

我用来测试的XML是:

<?xml version="1.0"?>
<document>
  <title>
    Foobar
  </title>
</document>

您可以将XML粘贴到这个(http://tsdexter.com/webservice-testing/programs-list.php)页面的文本区域中,然后如果您检查xmlraw下面的元素:您可以看到原始的xml字符串得到了响应——然而,在xml下面:什么都没有,而且Foreach也没有输出任何东西。

这是一个JSFIDLE,您可以看到HTML/JS,但实际上它没有做任何事情,因为它无法将ajax应用到PHP页面,所以我将上面的PHP版本包括进来进行测试。http://jsfiddle.net/tsdexter/EDqQB/

有什么想法吗?

共有1个答案

孙斌
2023-03-14

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

  1. 为什么在$_POST变量上运行urldecode?PHP应该为您这样做,除非您在某个地方重复转义它。
  2. 为什么要加载到DOM,然后加载到SimpleXML?我知道你说过你尝试过没有,但是他们在下面使用相同的XML解析器,所以这没有办法帮助你,而不是引入更多的混乱。
  3. 什么是var_dump(simplexml_load_string($rawxml))给你?我的猜测是错误的,意思是错误。在这种情况下,检查您是否打开了警告(error_reporting(E_ALL);ini_set('display_errors','1');)和关闭了详细的XML错误处理(libxml_use_internal_errors(false);)。
  4. 如果它确实提供了一个SimpleXMLElement对象,不要花太长时间查看var_dump输出。请尝试以下调试函数之一。
 类似资料:
  • 尝试使用Apache Flink从Cassandra获取数据,引用本文,我可以读取数据,但我不知道如何将其加载到DataStream对象中。代码如下: 我试过了 将变量中的数据加载到数据流中

  • 此外,特别是对于它得到的字段(检查case class[2]) 如果我将case类[2]中的所有字段都定义为String类型,那么一切都很好,但这不是我想要的。有没有一个简单的方法做这件事[3]? 参考文献 [3]我已经找到了这样做的方法,首先在DataFrame级别上定义列,然后将事情转换为Dataset(比如here或here或here),但我几乎可以肯定,这不是应该做的事情。我也很确定编码器

  • 问题内容: 我正在尝试通过一种称为的方法设置项目,到目前为止还可以。但是后来我从中创建了一个arrayList,但我不知何故找不到将这些信息存储到JTable中的方法。问题是我找不到设置固定行数的方法 这是我的代码: 上课开始联赛: 足球俱乐部课程: SportsClub课程(摘要): 最后是LeagueManager,它是一个接口: 有人能帮帮我吗?我已经尝试了好几天。谢谢。 问题答案: “问题

  • 我试图从一个名为的方法中设置项目,到目前为止还不错。但后来我从它创建了一个arrayList,不知何故,我找不到将这些信息存储到JTable中的方法。问题是我找不到设置固定行数的方法 下面是我的代码:

  • 问题内容: 现在我将数组作为字符串添加到正文中: 但是服务器需要在post参数上使用数组。如何添加数组而不是字符串?okhttp可以吗? 问题答案: 您当前正在以字符串形式发布。您将要模仿POST的复选框形式,用于 更多信息和良好的阅读, https://teamtreehouse.com/community/how-to-handle-multiple-checkboxes-values-in-

  • 我正在使用hazelcast IMap存储我的应用程序数据。 我面临着一个小问题。 问题说明:- 当我启动spring-boot应用程序时,我正在将数据库表数据加载到hazelcast中。 示例:- 但是当我获取相同的数据时,我得到的顺序不同。 那么有没有办法按照插入的顺序获取数据呢?