-1

WebとStackOverflowを検索しましたが、私が抱えている問題のようなものは見つかりませんでした。

次のHTML文字列があります。

var txtBoxForm = '<script src="http://ADDRESS"></script><noscript><a href="http://ADDRESS" target="_blank"><img src="http://ADDRESS" border=0 width=728 height=90></a></noscript>';

私はそれを次のように解析しようとしています:

parser = new DOMParser()
xmlDoc = parser.parseFromString(txtBoxForm, "text/xml");
alert(xmlDoc);
alert(xmlDoc.firstChild.nodeName);
alert(xmlDoc.firstChild.firstChild.nodeName);
alert(xmlDoc.firstChild.firstChild.firstChild.nodeName);
alert(xmlDoc.firstChild.firstChild.firstChild.firstChild.nodeName);

問題は、文字列がタグで始まり、子ノードがない場合でも、アラートから次のリターンが返されることです。

alert(xmlDoc);   ->   [Object document]
alert(xmlDoc.firstChild.nodeName);    ->    html
alert(xmlDoc.firstChild.firstChild.nodeName);    ->    body
alert(xmlDoc.firstChild.firstChild.firstChild.nodeName);    ->    parseerror
alert(xmlDoc.firstChild.firstChild.firstChild.firstChild.nodeName);   ->    h3

だから私の質問は:

  1. <script>文字列がで始まるのに、なぜ解析されたコードがで始まらないのですか?
  2. 私は何か間違ったことをしていますか?
  3. その文字列コードを正しく解析するにはどうすればよいですか?私の意図は、スクリプトとimgタグからsrcをキャプチャすることです。

助けてください。ありがとう。

4

2 に答える 2

3

スクリプトタグを渡すことができないようですDOMParser。さらに、他にもいくつか問題がありました。

  • XMLドキュメントには単一のルート要素が必要です(コードをでラップしました<doc></doc>
  • スクリプトは許可されていません(私はそれをに変更しました<scripto>
  • あなたはあなたの属性を引用しなければなりません

http://jsfiddle.net/mendesjuan/aVQaP/4/

var txtBoxForm =
  '<doc>'+
    '<scripto src="http://ADDRESS"></scripto>'+
    '<noscript>' + 
      '<a href="http://ADDRESS" target="_blank">'+
        '<img src="http://ADDRESS" border="0" width="728" height="90" />'+
      '</a></noscript></doc>';

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(txtBoxForm, "text/xml");

// outputs http://ADDRESS
console.log( xmlDoc.getElementsByTagName("scripto")[0].getAttribute("src") );
// outputs http://ADDRESS
console.log( xmlDoc.getElementsByTagName("img")[0].getAttribute("src") );​
于 2012-03-30T18:54:04.523 に答える
0

解析したい文字列の形式が正しくありません。''などの単純な文字列を使用してスクリプトを試行すると、<div><p>test</p></div>期待どおりに要素が解析されます。

私は、セキュリティポリシーでは、スクリプトの読み込み操作などを防ぐために、そのようなスクリプトタグを取得することは許可されていないと思います。

代わりに正規表現を使用することに関して、以下はあなたが期待するかもしれないようにあなたの文字列からあなたに両方の属性のsrc値を提供しています。

<script type ="text/javascript" language="javascript">
<!--
var txtBoxForm = '<div><script src="http://ADDRESS"></script><noscript><a href="http://ADDRESS" target="_blank"><img src="http://ADDRESS" border=0 width=728 height=90></a></noscript></div>';
var exp = /src="([^"]*)"/i;
console.log(exp.exec(txtBoxForm));

-->
</script>
于 2012-03-30T18:48:54.747 に答える