0

だからここに取り引きがあります: 私は、既存の NodeList から NodeList オブジェクトを取得しようとしています。簡単な XML の例を次に示します。

<products>
  <category>
  <name>Category A</name>
    <product>
      <code>1</code>
      <name>Product 1 Category A</name>
      <price>10.0</price>
    </product>
    <product>
      <code>2</code>
      <name>Product 2 Category A</name>
      <price>20.0</price>
    </product>
  </category>
  <category>
  <name>Category B</name>
    <product>
      <code>3</code>
      <name>Product 1 Category B</name>
      <price>5.0</price>
    </product>
    ...
  </category>
</products>

ご覧のとおり、タグ名は 2 回表示されます。1 回はカテゴリの子ノードとして、もう 1 回は製品の子ノードとして表示されます。商品名だけを取得したい。XML ファイルから読み取ることはできず、文字列として受け取るため、解析関数は次のようになります。

function parseXML(xmlString) {
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(xmlString, "text/xml");
    var products = xmlDoc.getElementsByTagName("product");
    var names = products.tags("name"); //Here's my problem
    for(var i = 0; i < names.length; i++){
        var element = names[i];
        var name = element.firstChild;
        $('#div_products').append(name.data + "<br>");  
    }
    $('#div_main').html($('#div_products').html());
}       

これは私が参照として使用しているものです: http://help.dottoro.com/ljtrjxbf.php。ただし、nodeListObject.tags("tag") を使用すると、次のエラーが発生します。

processMessage failed: Stack: TypeError: Object #<a NodeList> has no method 'tags'

さまざまなアプローチを試みましたが、何もうまくいきませんでした。平

var names = products["name"];

ドキュメンテーションによると、IE を除いて、最初のノードのみが返され、A) Android/Cordova で作業しており、B) 属性がありません」とにかくノードの名前」。

では、どうすればこれを解決できますか?私は製品の NodeList から新しい XMLDocument オブジェクトを作成しようとすることができると思っていましたが、この問題を解決するためのより簡単な方法があるはずなので、調べていません。

4

1 に答える 1

1

Teemu に感謝します。Javascript コードを少し調整することで、私が望んでいたことを達成することができました。将来誰かが役に立つと思うかもしれないので、ここに投稿します:

function parseXML(xmlString) {
    var NAME = 5; 
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(xmlString, "text/xml");
    var products = xmlDoc.getElementsByTagName("product");

    for(var i = 0; i < products.length; i++){
        var nodeList = produtos[i].childNodes;
        $('#div_products').append(nodeList[NAME].textContent + "<br>");
    }

    $('#div_main').html($('#div_products').html());
} 

5 は、必要な DOM TextNode のインデックス (製品名自体) であることに注意してください。したがって、次のようになります。

var NAME = 5;

それだけです。

于 2013-01-23T17:08:06.253 に答える