XML有很多节点如
<root>
<child>
<root>
<child>son</child>
</root>
</child>
</root>
<root>
<child>
<root>
<child>daughter</child>
</root>
</child>
</root>尽管生活中一般不会遇到这样定义XML的方法,但是如果要针对这些不规则的XML的,命名比较意外的XML,如何设计一个通用性强的XML读取类?
当节点很多的时候,是用递归还是面向对象的方法?如果面向对象的话,如何判断是自己想要的那个节点?求设计思路或者类似教程。
<root>
<child>
<root>
<child>son</child>
</root>
</child>
</root>
<root>
<child>
<root>
<child>daughter</child>
</root>
</child>
</root>尽管生活中一般不会遇到这样定义XML的方法,但是如果要针对这些不规则的XML的,命名比较意外的XML,如何设计一个通用性强的XML读取类?
当节点很多的时候,是用递归还是面向对象的方法?如果面向对象的话,如何判断是自己想要的那个节点?求设计思路或者类似教程。
解决方案 »
- java swing 组件大小偶尔不能调整
- 自动更新控件的问题
- 急求解答
- 怎么把map的key和value分别遍利出来啊?
- 如何抓取网页上的E-mail 并批量发送邮件
- 如何根据一个软件名知道它的安装路径?
- 求助~AIX-UNIX下,java程序中如何调用一个shell命令?比如whoamI,并返回值~ 谢谢高手帮忙啊
- 数据库驱动的开发~~
- to;zlj2000(我想飞)兄:我用netstat -a 查看了是Tcp协议占用了7001和7002端口,可是我不知道怎么改动它,有知道的都可回答。马上给分!
- java中有关new 的问题,不太明白。
- java按字节拆分字符串 后在拼成字符串
- 关于java字符串截取问题
你可以把对这种不规则的xml解析操作放到一个java类中,这个类只有对xml解析的操作(这是一个对象功能抽象的思想),具体实现某个功能(例如查找某个节点名为"name"的),这时候使用递归的思想。感觉XML在各种强大的解析工具面前,已经完全“赤裸”了,任何节点、节点名、属性、节点值等,都能取出来进行判断的。另外,标准XML第一样要有<?xml version="1.0"...
问题就在于采取哪样一种思想。递归本身也是一种思想。比如递归 getContent(String [] Condition){
if(Condition=="")
{getContent(String [] Condition)}
}
面向对象的话,我记得有一个模式可以循环读取的,不管子节点的结构,忘记哪一种了,请问面向对象的方法如何去解决复杂的XML结构呢
你可以这样 <root>
<child>son</child>
</root>
<root>
<child>daughter</child>
</root>
其实你还可以这样 <property name="root.child.count" value="2"/>
<property name="root.child.0" value="son"/>
<property name="root.child.1" value="daughter"/>
1.root下有几个child
2.取第n个child
你觉的哪种格式方便?第二种格式配合XPath能写出非常简洁的代码。
1.root下有几个child
2.取第n个child
你觉的哪种格式方便?第二种格式配合XPath能写出非常简洁的代码。我现在在于求解如何用组合模式来解决这个问题
这个帖子相当好,还可以顺便学E文
读:
对于,知道了特定取值路径的可以考虑用Xpath。
如果需要写入数据库的,推荐JAXB。
需要直接显示的推荐SAX,StAX。写:
推荐StAX。
如果是从结构表,或者数据里读取,可以考虑JAXB。
结合Spring和Hibernate,可以缩小代码量。
但是,速度肯定会降低。
lz举的那个例子明显是个非标准的xml文件,即它有两个root,格式不正确的xml文件好像不能用库来读取吧?我举个更极端的例子
<html>
<head>
<title>团结就能达到1=1>2的效果</title>
</head>
<body class=myclass>
<div>
<A href='http://www.baidu.com'><font color=red>点击</a></Font>
</body>
</html>
很变态吧,到处都是不符合xml规范的地方
你也许会说“你自己写规范点”,但是有时一些东西不是在自己控制之下的,你只能读