如何在Jquery中访问xml文本节点

时间:2009-06-02 02:04:28

标签: xml jquery

假设我得到以下XML结构:

<root>
<item>
 <item1>text1</item1>
 <item2>text2</item2>
 more text here
</item>
</root>

“此处更多文本”是一个文本节点,与层次结构中的其他数据节点处于同一级别,但似乎无法访问。

有没有办法使用jQuery函数提取上面显示的文本节点?

4 个答案:

答案 0 :(得分:6)

我想出了同样的解决方案:

  var xml = $("<root><item1>text1</item1><item2>text2</item2>more text here</root>");
  alert($(xml).contents().empty().end().text());

答案 1 :(得分:4)

因此,我提出的解决方案是删除item1和item2节点,只留下文本:

    $(responseXML).find('item').each(function(){
         var item1_text = $(this).find('item1').text();
         var item2_text = $(this).find('item2').text();

         $(this).contents().empty(); //removes the other nodes

         var extra_text = $(this).text();

    }

答案 2 :(得分:4)

使用contents()函数。例如,如果您有一个XML片段,如:

var root = $('<root><item1>text1</item1><item2>text2</item2>more text here</root>');

然后你可以通过以下方式获取文本:

var txt = root.contents()[2]

假设文本节点始终是&lt; root&gt;的第3个子节点。否则,如果您不知道位置,或者可能有一个包含多个文本节点的节点,则应通过过滤收集所有文本节点:

var textList = root.contents().filter(function() { return this.nodeType == 3; });

这将返回XML片段中的文本节点数组。要获取列表中的字符串,只需访问数组切片:

var txt = textList[0];

答案 3 :(得分:0)

这将获得正确的根/文本值。文本可以放在根节点的任何位置。

<script type="text/javascript"> $().ready(function() { var xml = $('#xml').find('root').contents().each(function(i){ if (this.nodeName=="#text" && this.nodeType=="3" && this.nodeValue.length>2) alert(this.nodeValue); }); });
</script>

有:

<div id="xml"><root><item1>text1</item1><item2>text2</item2>more text here</root></div>

注意:“inline”xml在Internet Explorer中不起作用,但如果您在示例中将root和itemX替换为有效的Html节点名称,它也会起作用。

说明:DOM将空节点和文本节点视为元素。如果你调试上面的.each(),你会看到以下内容:

alert( this.nodeName + '|' + this.nodeType + "|" + this.nodeValue);

#text|3| , ITEM1|1|null , #text|3| , ITEM2|1|null , #text|3| more text here

(抱歉,格式化无法使用匈牙利语键盘)