日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

java dom cdata_java – 通过DOM解析器从XML处理CDATA

發布時間:2024/7/23 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java dom cdata_java – 通过DOM解析器从XML处理CDATA 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

.....

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);

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

以下示例有3個子節點:文本節點“detail”,CDATA節點“with cdata”和文本節點“here”:

detail here

如果你運行你的代碼,你只得到“細節”,你就會失去其余部分.

以下示例有1個子節點:CDATA節點“此處帶有cdata的詳細信息”:

如果你運行你的代碼,你會得到一切.

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

現在有3個孩子因為空格和換行被選為文本節點.如果您運行代碼,則會獲得帶有換行符的第一個空文本節點,其余部分將丟失.

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

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();

docFactory.setCoalescing(true);

...

標簽:cdata,java,dom,xml

來源: https://codeday.me/bug/20190902/1789863.html

總結

以上是生活随笔為你收集整理的java dom cdata_java – 通过DOM解析器从XML处理CDATA的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。