关于xml变化检测的问题(急)

问题描述

FileInputStreamfis=newFileInputStream(f);SAXParserFactoryfactory=SAXParserFactory.newInstance();factory.setNamespaceAware(true);SAXParsersaxParser=factory.newSAXParser();//sax解析的,直接继承DefaultHandlerMyHandler1handler=newMyHandler1(fis);saxParser.parse(fis,handler);在handler的事件处理中,我如何才能获取fis流的位置啊?我试着将fis传入到handler里面,调用available函数,一开始输出一个有效数字,再之后就全部是0了,有哪位有办法解决这个问题的?感激不尽!如果能够有其他方法,既能进行sax解析xml文件,又能够定位文件流的位置也可以。

解决方案

解决方案二:
DefaultHanlder所继承的接口ContentHandler中有一个方法publicvoidsetDocumentLocator(Locatorlocator)这个方法是推荐SAX解析器来调用的(但并非必须),因此,如果你所用的SAX解析器支持,它会在调用你的Handler的任何方法之前,尝试调用此方法,因此,你可以重载此方法,看能不能拿到一个location,只要拿到locator,就可以获得当前的行、列。如果没有,可以换一家XML类库试试。---------------publicvoidsetDocumentLocator(Locatorlocator)ReceiveanobjectforlocatingtheoriginofSAXdocumentevents.SAXparsersarestronglyencouraged(thoughnotabsolutelyrequired)tosupplyalocator:ifitdoesso,itmustsupplythelocatortotheapplicationbyinvokingthismethodbeforeinvokinganyoftheothermethodsintheContentHandlerinterface.Thelocatorallowstheapplicationtodeterminetheendpositionofanydocument-relatedevent,eveniftheparserisnotreportinganerror.Typically,theapplicationwillusethisinformationforreportingitsownerrors(suchascharactercontentthatdoesnotmatchanapplication'sbusinessrules).Theinformationreturnedbythelocatorisprobablynotsufficientforusewithasearchengine.Notethatthelocatorwillreturncorrectinformationonlyduringtheinvocationoftheeventsinthisinterface.Theapplicationshouldnotattempttouseitatanyothertime.Parameters:locator-AnobjectthatcanreturnthelocationofanySAXdocumentevent.SeeAlso:Locator
解决方案三:
顶!
解决方案四:
我试过这种方法,能获取到locator,但是似乎意义不大,因为获取到xml文件的行、列信息,我还是得不到文件流的位置(变化检测算法中需要定位流的位置,后续算法需要用流的索引删除相同的文档内容,从而得到文件的变化内容),还是很感激你。
解决方案五:
你把xml文件先解析成一个文件类型,再把这个文件类型做为参数传到你的handler里面就可以了。
解决方案六:
楼上的方法也试过了:Filef=newFile("test.xml");...MyHandler1handler=newMyHandler1(f);...handler触发事件时,对file进行处理,还是不能得到流的位置啊。
解决方案七:
fis.getChannel(),行不行?不知道你拿到文件位置要做什么?
解决方案八:
我直接说我想实现的功能吧,我需要检测xml文件的变化,我先利用sax遍历整个文档,在这个过程中获取元素在流里面的开始位置,长度以及hash值,当第二次遍历xml文件时候,如果元素的hash值相同,则需要跳过元素,不做任何处理,知道最后,留下来的就是变化的部分。所以需要在sax解析时获取到流的位置。似乎没有fis.getChannel()这个方法哦!
解决方案九:
那你这个需求我觉得用Locator可以实现吧。你用长度和Hash值决定元素是否变化,而用Locator得到的行、列,不一样可以表示标签有没有发生变化吗?不好意思,fis.getChannel不是public方法。

时间: 2025-01-28 01:12:51

关于xml变化检测的问题(急)的相关文章

xml转义问题!急!!!!!!!求大神!!!

问题描述 xml转义问题!急!!!!!!!求大神!!! 我获取到xml中的一个节点的内容是这样的: WFF<#leftQuot>201511<#rightQuot>0361 请问我该如何将其中的字符转义, 解决方案 使用replace不行么? 解决方案二: 使用replace 应该行啊 解决方案三: base64编码解码-解决xml输出转义问题

读取xml的错误讯息....急急急...

问题描述 请问各位大大...小弟使用System.Xml.Linq从网路读取一个xml档varData=fromparentinXDocument.Load(http://xxxxxx").Element("aaa").Elements("data_item"){......} 但会出现以下错误讯息...请问大大...该如何解....UnhandledException:System.Xml.XmlException:UnexpectedXMLdeclar

Flash+ASP XP iis下乱码(遇到Flash+asp 乱码的朋友必看)

iis 首先说明,此日志不是技术型日志,纯属个人感情发泄! 遇到 Flash+asp 乱码的朋友必看! 从FPV v2开始,Flash+asp乱码的问题一直解决不了,所有可能的方法都试过,最后调试为在标准的 2000 或 2003 服务器下不会乱码.但个人的xp下的iis乱码,始终无法解决,并且是时好时坏. 从一开始怀疑的原因到现在,疑点有下(个人认为): 1.ASP输出的utf-8有问题? 加了 <%@LANGUAGE="VBSCRIPT" CODEPAGE="650

Flash ASPXPiis下乱码(遇到 Flash+asp 乱码的朋友必看)

iis 从FPV v2开始,Flash+asp乱码的问题一直解决不了,所有可能的方法都试过,最后调试为在标准的 2000 或 2003 服务器下不会乱码.但个人的xp下的iis乱码,始终无法解决,并且是时好时坏. 从一开始怀疑的原因到现在,疑点有下(个人认为): 1. ASP输出的utf-8有问题: 加了 %26lt;" CODEPAGE="65001"%%26gt; 测试了一遍,自己的IIS(xp)正常,狂欢喜一阵,当在按一下读取按钮时...可怕的事情发生了,居然乱码了,到

smart GWT 配置

问题描述 两个接口名字StudentInfoService,StudentInfoServiceAsync,StudentInfoServiceImpl是StudentInfoService的实现类在web.xml怎么配置啊?急啊!!!! 解决方案 解决方案二:来个人啊!

允许开机启动-急急急,安卓获取开机启动项列表,不是AndroidManifest.xml注册的项,是手机设置的

问题描述 急急急,安卓获取开机启动项列表,不是AndroidManifest.xml注册的项,是手机设置的 急急急,安卓获取开机启动项列表,不是AndroidManifest.xml注册的项,是手机设置的,能不能获取?在网上找的资料都只有AndroidManifest.xml注册过的列表,并没有手机设置的允许开机启动的列表,求大神支招...如图所示的开机启动列表! 解决方案 各位大神,大牛们,帮帮忙吧

mybatis逆向工程生成的xml中_parameter!=null这个参数在哪里,急急急

问题描述 mybatis逆向工程生成的xml中_parameter!=null这个参数在哪里,急急急 需要什么文件,告诉我 解决方案 答案请参考http://blog.csdn.net/isea533/article/details/44002219

急求!!配置xml文件时,已经把dtd文件导入了,但是还是没有提示。

问题描述 急求!!配置xml文件时,已经把dtd文件导入了,但是还是没有提示. dtd文件已经导入,检查了很多遍,应该没有错误,但是依旧没有提示~这是为什么啊?别人的工程导进来以后,xml有提示. 解决方案 可能是ecilipse自身的问题,它过了一会就自己好了

急着用!利用.net框架 将jpeg转换成xml

问题描述 同题,请问大侠,这如何实现啊!跪求啊!急着用! 解决方案 解决方案二:急着用!利用.net框架将jpeg转换成xml解决方案三:转成base64格式Stringx=Convert.ToBase64String(File.ReadAllBytes("c:\xx.jpg"));然后存储xml如"<data>"+x+"</data>"