Java 通过DOM解析器从XML处理CDATA

Java 通过DOM解析器从XML处理CDATA,java,xml,dom,cdata,Java,Xml,Dom,Cdata,我以前从未处理过XML,所以我不确定如何在XML文件中处理CDATA。我迷失在节点、父节点、子节点、nList等中 谁能从这些代码片段中告诉我我的问题是什么 我的getTagValue()方法适用于除“Details”(包含CDATA的标记)之外的所有标记 ..... NodeList nList = doc.getElementsByTagName("Assignment"); for (int temp = 0; temp < nList.getLength(); temp++) {

我以前从未处理过XML,所以我不确定如何在XML文件中处理CDATA。我迷失在节点、父节点、子节点、nList等中

谁能从这些代码片段中告诉我我的问题是什么

我的
getTagValue()
方法适用于除“Details”(包含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();
}
。。。。。
NodeList nList=doc.getElementsByTagName(“分配”);
对于(int-temp=0;temp
我怀疑您的问题出在
getTagValue
方法的以下代码行中:

Node nValue = (Node) nlList.item(0);
你总是第一个孩子!但你可能不止一个

以下示例有3个子节点:文本节点“detail”、CDATA节点“with CDATA”和文本节点“here”:


除了Bogdan出色的解释之外,如果你能使用Xom、Dom4J等,你可能会做得更好。我只是在js中寻找同样的东西,所以
element.childNodes[0]。nodeValue
而不是
element。nodeValue
帮了我一个忙,谢谢!
<Details>detail <![CDATA[with cdata]]> here</Details>
<Details><![CDATA[detail with cdata here]]></Details>
<Details>
   <![CDATA[detail with cdata here]]>
</Details>
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setCoalescing(true);
...