3

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 文字列をすべて 1 行で出力します - ポストはデータを適切に送信しています。

2 番目の echo $xml は何も出力せず、foreach も何も出力しません。PHP で何かが機能していません。

また、 $xmlraw を simplexml_load_string($xmlraw) に直接ロードしようとしましたが、機能しません-形式が整っていないためだと思いますか?

テストに使用している XML は次のとおりです。

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

この ( http://tsdexter.com/webservice-testing/programs-list.php ) ページのテキスト領域に XML を貼り付けてから、xmlraw の下の要素を調べると、生の xml 文字列がエコーされていることがわかります -ただし、xmlの下には何もありません。また、foreachも何も出力しません。

ここに jsFiddle があるので、HTML/JS を見ることができます - PHP ページに ajax できないため、実際には何もしません - そこで、上記の 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 に答える