簡體   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