繁体   English   中英

如何使用JavaScript阅读包含html标记的XML文件上的Childnode内容

[英]How, with javascript, can i read Childnode content on an XML file that contains html tags

要读取子节点的内容,我使用:

MYDATA = xhr.responseXML.getElementsByTagName("MenuItem")[INDEX].getElementsByTagName("PageContent")[0].childNodes[0].nodeValue;

有时,当childNode数据包含HTML标记(例如<b><br>标记)时,我遇到了问题,因为它们像XML标记一样被计数(例如childnodes)。

我的问题是如何从子节点获取整个数据,即使它包含其他html标签也是如此

例:

<MenuItem> 
    <MenuText>menu <b> text <b><MenuText>
</MenuItem >

会返回“菜单”,但我希望它返回: menu <b> text <b>

是的,不是,这取决于您的解析器。 这样做的原因是因为假定XML中的所有文本节点都将<和>替换为htmlentity() ,并将所有其他特殊字符替换为htmlspecialchars() 我相当确定它会创建一个以HTML标签为名称的新节点。

唯一的两种解决方案是将XML数据存储到字符串中,使用regex取出HTML标签(好吧,所有<和>字符),然后用我上面提到的正确值替换它们。您将其传递给解析器(鉴于“ parser”是DOM解析器,因此在javascript中为parser.parseFromString() )。)。 另一种方法是获取节点,然后使用递归循环获取整个节点的子节点集,然后将其名称和内容串联在一起。 第二种方法是更多的编程工作和更多的处理,我建议对正则表达式和字符替换进行简单的补救。

或者,您可以在此处阅读有关CDATA的信息 ,而可以通过将所有内容放在![CDATA[]标记中,而转义标记,但这就是您创建XML文件的方式。 您应该通知网站管理员您获取XML的网站,XML的创建不正确,并且标记必须用![CDATA[]标记转义,或者将<和>替换为htmlentity() 我想您也可以使用正则表达式将HTML代码放在![CDATA[]标记中,但是这可能比替换<和>标记更慢且效率更低。

W3C的官方元素属性可返回元素及其后代的所有文本,这是DOM v3的一部分,称为textContent ,但尚不支持所有浏览器(我正在用IE浏览器;我认为它在这里称为innerText)-如果那甚至与您有关。

因此,对于您的XML代码段,您的代码行将如下所示:

MYDATA = xhr.responseXML.getElementsByTagName("MenuItem")[INDEX].getElementsByTagName("MenuText")[0].textContent;

但这不会保留HTML标记。 因此,最终取决于您要使用该XML做什么。 是否要将其添加到另一个DOM树? 如果是这样,您可以将该元素及其所有后代一起添加到其他位置。

MYDATA = xhr.responseXML.getElementsByTagName("MenuItem")[INDEX].getElementsByTagName("MenuText")[0].cloneNode(true);
someOtherElement.appendChild(MYDATA);

否则,您将不得不编写一个循环,以将每个节点(文本内容也是一个节点,就像空白一样)从源复制到目标,并将其附加到那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM