[英]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.