From: kamiseq <ka...@gm...> - 2012-07-18 05:57:46
|
super cool, If you want I can send you my test xml, but the chunk above should be enough to reproduce error pozdrawiam Paweł Kamiński ka...@gm... pka...@gm... ______________________ On 17 July 2012 00:40, <jz...@xi...> wrote: > Ok, will investigate and get back > > > > ----- Original Message ----- > From: > kamiseq <ka...@gm...> > > To: > <vtd...@li...> > Cc: > > Sent: > Tue, 3 Jul 2012 21:26:11 +0200 > Subject: > [Vtd-xml-users] VTDNav#getElementFragment returns wrong value > > > > hej, > I just run into strange issue when parsing simple xml (html) like this > > <!--[if !IE]><!--> > <style type="text/less" title="main"> > @name=main.css > @import "less/rules.less"; <http://rules.less> > </style> > <!--<![endif]--> > <!--[if lte IE 8]> > <style type="text/less" title="ie8"> > @import "less/rules_lte_ie8.less"; <http://ie8.less> > @import "less/clean.less"; <http://clean.less> > </style> > <![endif]--> > <style type="text/less" title="ie9"> > @import "less/rules_ie9.less"; <http://ie9less> > @import "less/clean.less"; <http://clean.less> > </style> > <script src="js/main.js" <http://main.js>type="text/javascript"></script> > > maybe my code is wrong but here is what I do (given xml is parsed and nav > and autopilot is created) > > ap.selectXPath("//style/text()); // AutoPilot instance > while ((result = ap.evalXPath()) != -1) > { > String body = vn.toNormalizedString(targetPosition); // this is > ok I get the right content > vn.toElement(VTDNav.PARENT); > int o = (int)vn.getElementFragment(); > int l = (int)(vn.getElementFragment() >> 32); // wrong value > final String s = new String(vn.getXML().getBytes(o, l)); > > // simple workaround > l = s.substring(0, s.indexOf("</style>")+8).length(); > modifier.removeContent(o, l); > modifier.insertBeforeElement(replaceString); > } > > new String(vn.getXML().getBytes(o, l)) will return this xml chunk > <style type="text/less" title="main"> > @name=main.css > @import "less/rules.less"; <http://rules.less> > </style> > <!--<![endif]--> > <!--[if lte IE 8]> > <style type="text/less" title="ie8"> > @import "less/rules_lte_ie8.less"; <http://ie8.less> > @import "less/clean.less"; <http://clean.less> > </style> > <![endif]--> > > for first autopilot match. when I call remove on modifier I get > ModifyException("Invalid insertion/deletion condition detected between > offset .. and offset") from XMLModifier. > for next autopilot match everything is fine and vn.getElementFragment()returns right value. > > I think it is all about comment block after style. > > what do you think? is there better solution to that? > > pozdrawiam > Paweł Kamiński > > ka...@gm... > pka...@gm... > ______________________ > > |