0

我有一个具有以下结构的 XML 文件:

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

我需要获取<OPTIONS>with<GRP1>作为父节点的所有子节点的节点值。我尝试了以下代码,但没有奏效:

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

谁能告诉我我的代码有什么问题?

4

1 回答 1

1
  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 Core 属性。如果您需要支持该浏览器,您可以使用类似的浏览器,例如:)

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('');
}
于 2013-08-27T16:30:15.033 回答