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相关推荐
- java xml解析器_Java XML解析器
java xml解析器 Java XML parser is used to work with xml data. XML is widely used technology to transpor ...
- java sql分析器_java sql解析器比较druid sql parser vs jsqlparser vs fdb-sql-parser
先上结论. 功能上:druid sql parser(支持分区.WITH.DUAL等.使用mysql语法解析时,已知oracle的一些操作符会被转为mysql,如|| 转为OR.使用oracle解析器 ...
- java xml 查询_Java DOM解析器 - 查询XML文档
演示示例 这是需要我们查询的输入XML文件: Ferarri 101 Ferarri 201 Ferarri 301 Lamborgini 001 Lamborgini 002 Lamborgini ...
- pythonxml解析_python之XML解析
XML 指可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. XML 被设计用来传输和存储数据.XML适用于跟踪中小型数据而无需基于SQL的主干. Python ...
- java sax解析xml_在Java中使用DOM,SAX和StAX解析器解析XML
java sax解析xml 我碰巧通读了有关Java中XML解析和构建API的章节. 我试用了样本XML上的其他解析器. 然后,我想在我的博客上分享它,这样我就可以得到该代码的参考以及任何阅读此代码的 ...
- 在Java中使用DOM,SAX和StAX解析器解析XML
我碰巧通读了有关Java中的XML解析和构建API的章节. 我试用了样本XML上的其他解析器. 然后,我想在我的博客上分享它,这样我就可以参考该代码以及任何阅读此书的参考. 在本文中,我将在不同的解析 ...
- Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)
Java的xml解析器库有很多,总的来说,万变不离其宗的就是SAX和DOM解析器. SAX的包是org.xml.sax DOM的包是org.w3c.dom 1) DOM DOM 是用与平台和语言无关的 ...
- XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较
6月20日 XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较 1:DOM DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准.DOM 是以层次结 ...
- java w3c xml_org.w3c.dom(java dom)解析XML文档
首先来了解点Java DOM 的 API: 1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBui ...
最新文章
- 51单片机(STC89C52RC) IO扩展实验
- Spring Security系列教程解决Spring Security环境中的跨域问题
- 【单调栈】向右看齐(luogu 2947)
- 通过Jedis API使用排序集
- [Swift]LeetCode281. 之字形迭代器 $ Zigzag Iterator
- 空字符是什么类型_Redis是什么?看这一篇就够了!
- 从2-3-4树谈到Red-Black Tree(红黑树)
- jQuery 学习-样式篇(九):jQuery 存储和删除元素私有数据的方法
- c#解析json字符串数组_在C#中解析Json字符串
- iOS 消息发送与转发详解
- 浅谈程序猿简历的写法,你会如何写你的简历呢。
- 让HTML播放器使用指定ua,chimee-mobile-player
- 指针数组和数组指针的使用
- Matrix TraceCanary
- 【Idea】Process finished with exit code 0 是什么意思?
- android webview使用html5input id=input type=file/ 上传相册、拍照照片
- java验证身份证合法性_Java安全性,第2部分:身份验证和授权
- eslint搭配prettier出现Replace `XXX` with `··········XXX·······`的问题解决方法
- 天大博士/硕士学位论文Latex模板2021年
- 经典SVM之SMO算法实现