簡體   English   中英

使用JavaScript訪問XML節點值

[英]Accessing XML node values with JavaScript

我有一個具有以下結構的XML文件:

<FIELDS>
    <GRP1>
       <OPTION>
            <VALUE>71</VALUE>
            <CONTENT>Text</CONTENT>
       </OPTION>
       ...
       ...
    </GRP1>
    <GRP2>
       <OPTION>
            <VALUE>77</VALUE>
            <CONTENT>Test</CONTENT>
       </OPTION>
    </GRP2>
      ...
      ...
</FIELDS>

我需要獲取以<GRP1>作為父節點的<OPTIONS>所有子節點的節點值。 我嘗試了以下代碼,但沒有成功:

// [...]
var xmlGRP = xmlDoc.getElementsByTagName(GRP1);
xmlvalue = xmlGRP.childNodes[0].childNodes[0].firstChild.nodeValue;
xmlcontent = xmlGRP.childNodes[0].childNodes[1].firstChild.nodeValue;

誰能告訴我我的代碼有什么問題嗎?

  1. 除非您定義了一個名為GRP1的變量,否則應為字符串'GRP1'

  2. xmlGRP直接是NodeList,而不是Node; 您無需查看其上的childNodes屬性。

  3. 由於在空格處理方面可能存在差異,因此訪問編號的childNodes不可靠。

  4. 對於空字符串,訪問firstChild將會失敗,因為該元素將沒有Text節點子級。

嘗試類似:

var grp1 = xmlDoc.getElementsByTagName('GRP1')[0];
var firstOption = grp1.getElementsByTagName('OPTION')[0];
var value = firstOption.getElementsByTagName('VALUE')[0].textContent;
var content = firstOption.getElementsByTagName('CONTENT')[0].textContent;

(請注意, textContent是IE 8及以下版本不支持的DOM Level 3核心屬性。如果需要支持該瀏覽器,則可以使用類似的方法,例如:)

function getTextContent(node) { // not 100% DOM3 compliant... good enough
    if ('textContent' in node)
        return node.textContent;
    var texts = [];
    for (child = node.firstChild; child!==null; child = child.nextSibling) {
        if (child.nodeType===1) // ELEMENT_NODE
            texts.push(getTextContent(child));
        else if (child.nodeType===3 || child.nodeType===4) // TEXT_NODE, CDATA_SECTION_NODE
            texts.push(child.data);
    }
    return texts.join('');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM