一个解析xml数据的问题,求方案

fuqiang229 2008-08-21 05:11:00


了解xml解析的人都知道,sax是基于事件的,也就是说一边读,一边去处理事件,比如读到<author>时标签开始,这

时我们可以把<author>TT</author>中的数据"TT"读出来,然后从网络上发送出去.这样的好处是不用把整个树全拿出来再处理,不浪费内存.如果我们这样的标签有10G个,那这样就太方便了.
如果反过来我这里从网络不停的传过来数据,好多,我想把它存成一个xml文件,要有10G个标签..我总不能先构建整个树再存吧.于是我就想到了sax.一边读到数据一边写成xml,
可惜,我看了xml解析好几天也没有看到有这么用sax的,
我从jaxp到jdom到dom4j全看了,没有这么用的啊????

XMLWriter writer = new XMLWriter(out, outformat);
writer.write(this.doc); //全是这么用的,先构建好doc,然后再写,恐怖~~~~,哪有那么大的内存啊.
writer.flush();

我的问题就是:像我这种写数据的应该用什么方案,应该用sax吗?如果不用那我用什么呢?
谁给我一个解决的方法啊,谢谢...........最好再有点代码??

谢谢..
...全文
186 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuqiang229 2008-08-23
  • 打赏
  • 举报
回复
dom4j也可以写
fuqiang229 2008-08-23
  • 打赏
  • 举报
回复
他说对了可以写的,试试就知道了.
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;


public class SAXWriteTest {

/**
* @param args
* @throws FileNotFoundException
* @throws IllegalArgumentException
* @throws TransformerFactoryConfigurationError
* @throws TransformerConfigurationException
* @throws SAXException
*/
public static void main(String[] args) throws IllegalArgumentException, FileNotFoundException, TransformerConfigurationException, TransformerFactoryConfigurationError, SAXException {
TransformerHandler handler = ((SAXTransformerFactory)SAXTransformerFactory.newInstance()).newTransformerHandler();
handler.setResult(new StreamResult(new FileOutputStream("abc.txt")));//这里给定输出位置

handler.startDocument();
AttributesImpl attrs = new AttributesImpl();

attrs.addAttribute("", "", "attrName", "", "attrValue");

handler.startElement("", "", "ROOT", attrs);
handler.endElement("", "", "ROOT");
handler.endDocument();

}

}
ChDw 2008-08-22
  • 打赏
  • 举报
回复
SAXTransformerFactory 就是用SAX方式进行XML的写操作
donyoung 2008-08-22
  • 打赏
  • 举报
回复
SAX是只读的,不能用来写XML内容。你接收到的数据是什么格式的?也是XML的?
可以考虑StAX
fuqiang229 2008-08-21
  • 打赏
  • 举报
回复
不过这么用的好象真的很少...一般都是读...
fuqiang229 2008-08-21
  • 打赏
  • 举报
回复
很强大~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fuqiang229 2008-08-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ChDw 的回复:]
是,那个是JDK中自带的类,不需要额外的包的。你用JDK1.4以上都可以编译和使用
[/Quote]
那你知道dom4j用什么实现类似功能吗?
ChDw 2008-08-21
  • 打赏
  • 举报
回复
TransformerHandler extends ContentHandler的,那些方法在ContentHandler声明
fuqiang229 2008-08-21
  • 打赏
  • 举报
回复
从接口 org.xml.sax.ContentHandler 继承的方法
characters, endDocument, endElement, endPrefixMapping, ignorableWhitespace, processingInstruction, setDocumentLocator, skippedEntity, startDocument, startElement, startPrefixMapping
从接口 org.xml.sax.ext.LexicalHandler 继承的方法
comment, endCDATA, endDTD, endEntity, startCDATA, startDTD, startEntity

看见了.............
ChDw 2008-08-21
  • 打赏
  • 举报
回复
是,那个是JDK中自带的类,不需要额外的包的。你用JDK1.4以上都可以编译和使用
fuqiang229 2008-08-21
  • 打赏
  • 举报
回复
javax.xml.transform.sax
接口 TransformerHandler????????????/
不是这个吧..
String getSystemId()
获取要从其解析相对 URL 的基本 ID(URI 或系统 ID)。
Transformer getTransformer()
获取与此处理程序关联的 Transformer,用于设置参数和输出属性。
void setResult(Result result)
设置与用于转换的此 TransformerHandler 关联的 Result。
void setSystemId(String systemID)
设置要从其解析相对 URL 的基本 ID(URI 或系统 ID)。
没有你说的方法.
fuqiang229 2008-08-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ChDw 的回复:]
Java codeTransformerHandler handler = ((SAXTransformerFactory)SAXTransformerFactory.newInstance()).newTransformerHandler();
handler.setResult(new StreamResult(writer));//这里给定输出位置

handler.startDocument();
AttributesImpl attrs = new AttributesImpl();

attrs.addAttribute("", "", "attrName", "", "attrValue");

handler.startElement("", "", "ROOT", attrs);
handler.endElement(…
[/Quote]
这是哪里的类?dom4j??眼生,不过看意思好象就是我要的.
fuqiang229 2008-08-21
  • 打赏
  • 举报
回复
谢谢,我看一下
atealxt 2008-08-21
  • 打赏
  • 举报
回复
关于解析,印象中数据量少用DOM,多则用SAX较好。

写XML没怎么接触过,也许这个能帮你:)
StAX
http://www.ibm.com/developerworks/cn/xml/x-stax3.html#N101A0
ChDw 2008-08-21
  • 打赏
  • 举报
回复
TransformerHandler handler = ((SAXTransformerFactory)SAXTransformerFactory.newInstance()).newTransformerHandler();
handler.setResult(new StreamResult(writer));//这里给定输出位置

handler.startDocument();
AttributesImpl attrs = new AttributesImpl();

attrs.addAttribute("", "", "attrName", "", "attrValue");

handler.startElement("", "", "ROOT", attrs);
handler.endElement("", "", "ROOT");
handler.endDocument();



这样就可以用SAX的方式操作写XML过程了
fuqiang229 2008-08-21
  • 打赏
  • 举报
回复
为什么没人回我呢?想了好几天了,求求各位大侠了..
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需深入理解各章节内容,特别是关于寄存器配置、时序要等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧