日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

java – 通過DOM解析器從XML處理CDATA

 印度阿三17 2019-09-02

我以前從未處理過XML,所以我不確定如何在XML文件中處理CDATA.我迷失在節(jié)點(diǎn),父節(jié)點(diǎn),子節(jié)點(diǎn),nList等中.

誰能告訴我這些代碼片段的問題是什么?

我的getTagValue()方法適用于除“詳細(xì)信息”之外的所有標(biāo)記,“詳細(xì)信息”是包含CDATA的標(biāo)記.

.....
NodeList nList = doc.getElementsByTagName("Assignment");
for (int temp = 0; temp < nList.getLength(); temp  ) {
    Node nNode = nList.item(temp);
    if (nNode.getNodeType() == Node.ELEMENT_NODE) {
        Element eElement = (Element) nNode;
        results = ("Class : "   getTagValue("ClassName", eElement))   
                  ("Period : "   getTagValue("Period", eElement))  
                  ("Assignment : "   getTagValue("Details", eElement));
        myAssignments.add(results);
    }
}
.....
private String getTagValue(String sTag, Element eElement) {
    NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();

    Node nValue = (Node) nlList.item(0);
    if((CharacterData)nValue instanceof CharacterData)
    {
        return ((CharacterData) nValue).getData();
    }
    return nValue.getNodeValue();
}

解決方法:

我懷疑你的問題出在getTagValue方法的以下代碼行中:

Node nValue = (Node) nlList.item(0);

你總是得到第一個(gè)孩子!但是你可能不止一個(gè).

以下示例有3個(gè)子節(jié)點(diǎn):文本節(jié)點(diǎn)“detail”,CDATA節(jié)點(diǎn)“with cdata”和文本節(jié)點(diǎn)“here”:

<Details>detail <![CDATA[with cdata]]> here</Details>

如果你運(yùn)行你的代碼,你只得到“細(xì)節(jié)”,你就會(huì)失去其余部分.

以下示例有1個(gè)子節(jié)點(diǎn):CDATA節(jié)點(diǎn)“此處帶有cdata的詳細(xì)信息”:

<Details><![CDATA[detail with cdata here]]></Details>

如果你運(yùn)行你的代碼,你會(huì)得到一切.

但是上面這樣寫的例子如下:

<Details>
   <![CDATA[detail with cdata here]]>
</Details>

現(xiàn)在有3個(gè)孩子因?yàn)榭崭窈蛽Q行被選為文本節(jié)點(diǎn).如果您運(yùn)行代碼,則會(huì)獲得帶有換行符的第一個(gè)空文本節(jié)點(diǎn),其余部分將丟失.

您要么遍歷所有子項(xiàng)(無論多少)并連接每個(gè)子項(xiàng)的值以獲得完整結(jié)果,或者如果區(qū)分純文本和CDATA內(nèi)的文本并不重要,則在上面設(shè)置合并屬性文檔制作工廠首先:

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setCoalescing(true);
...

Coalescing specifies that the parser produced by this code will convert CDATA nodes to Text nodes and append it to the adjacent (if any) text node. By default the value of this is set to false.

來源:https://www./content-1-434451.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多