我以前从未处理过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相关推荐

  1. java xml解析器_Java XML解析器

    java xml解析器 Java XML parser is used to work with xml data. XML is widely used technology to transpor ...

  2. java sql分析器_java sql解析器比较druid sql parser vs jsqlparser vs fdb-sql-parser

    先上结论. 功能上:druid sql parser(支持分区.WITH.DUAL等.使用mysql语法解析时,已知oracle的一些操作符会被转为mysql,如|| 转为OR.使用oracle解析器 ...

  3. java xml 查询_Java DOM解析器 - 查询XML文档

    演示示例 这是需要我们查询的输入XML文件: Ferarri 101 Ferarri 201 Ferarri 301 Lamborgini 001 Lamborgini 002 Lamborgini ...

  4. pythonxml解析_python之XML解析

    XML 指可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. XML 被设计用来传输和存储数据.XML适用于跟踪中小型数据而无需基于SQL的主干. Python ...

  5. java sax解析xml_在Java中使用DOM,SAX和StAX解析器解析XML

    java sax解析xml 我碰巧通读了有关Java中XML解析和构建API的章节. 我试用了样本XML上的其他解析器. 然后,我想在我的博客上分享它,这样我就可以得到该代码的参考以及任何阅读此代码的 ...

  6. 在Java中使用DOM,SAX和StAX解析器解析XML

    我碰巧通读了有关Java中的XML解析和构建API的章节. 我试用了样本XML上的其他解析器. 然后,我想在我的博客上分享它,这样我就可以参考该代码以及任何阅读此书的参考. 在本文中,我将在不同的解析 ...

  7. Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)

    Java的xml解析器库有很多,总的来说,万变不离其宗的就是SAX和DOM解析器. SAX的包是org.xml.sax DOM的包是org.w3c.dom 1) DOM DOM 是用与平台和语言无关的 ...

  8. XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较

    6月20日 XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较  1:DOM     DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准.DOM 是以层次结 ...

  9. java w3c xml_org.w3c.dom(java dom)解析XML文档

    首先来了解点Java DOM 的 API: 1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBui ...

最新文章

  1. 51单片机(STC89C52RC) IO扩展实验
  2. Spring Security系列教程解决Spring Security环境中的跨域问题
  3. 【单调栈】向右看齐(luogu 2947)
  4. 通过Jedis API使用排序集
  5. [Swift]LeetCode281. 之字形迭代器 $ Zigzag Iterator
  6. 空字符是什么类型_Redis是什么?看这一篇就够了!
  7. 从2-3-4树谈到Red-Black Tree(红黑树)
  8. jQuery 学习-样式篇(九):jQuery 存储和删除元素私有数据的方法
  9. c#解析json字符串数组_在C#中解析Json字符串
  10. iOS 消息发送与转发详解
  11. 浅谈程序猿简历的写法,你会如何写你的简历呢。
  12. 让HTML播放器使用指定ua,chimee-mobile-player
  13. 指针数组和数组指针的使用
  14. Matrix TraceCanary
  15. 【Idea】Process finished with exit code 0 是什么意思?
  16. android webview使用html5input id=input type=file/ 上传相册、拍照照片
  17. java验证身份证合法性_Java安全性,第2部分:身份验证和授权
  18. eslint搭配prettier出现Replace `XXX` with `··········XXX·······`的问题解决方法
  19. 天大博士/硕士学位论文Latex模板2021年
  20. 经典SVM之SMO算法实现

热门文章

  1. 程序员在群询问破解软件
  2. 【Q】【poj 1144】【poj 1523】
  3. PHP中foreach遍历循环的使用(两种用法)
  4. Leetcode--238. 除自身以外数组的乘积
  5. 总结下载Spring Framework的jar包
  6. 虎贲计算机二级视频解析百度云,详解虎贲T7520:5G为什么需要全场景覆盖增强技术?...
  7. data为long 怎么设置vue_vue基础之data
  8. ubuntu切换root用户
  9. CSDN中图片缩放与居中
  10. Python文件拷贝函数