我遇到了奇怪的问题,我在网上找不到任何关于这个的东西。
我正在使用xpath来定位我的xml块,然后用其他东西替换它,例如:
// input
<html>
...
<style type="">
background: yellow;
</style>
<link href="path" />
</html>
// output
<html>
...
<link href="pathToFileWithBackground" />
<link href="path_other" />
</html>我使用XMLModifier来实际更新令牌(使用updateToken方法:]),它用于属性操作或元素的文本(正文)。
我有样式元素的问题,我想处理它的主体,然后用链接到某个文件替换整个元素。
显然,更新文本标记将导致样式标记内部带有链接标记。
<style type=""><link href="path" />
</style>因此,我尝试将导航器移动到样式元素,得到以下结果
<<link href="path" /> type="">
background: yellow;
</style> 我还尝试在样式元素之前插入链接元素并将其移除,但当我试图保存修饰符的数据时,从XMLModifier得到了ModifyException(“在offset ..和offset之间检测到无效的插入/删除条件”)。下面是实现该功能的代码
ap.selectXPath("//style/text());
vn.toElement(VTDNav.PARENT);
modifier.insertBeforeElement(replaceString);
modifier.remove(); 我尝试使用remove(长l)和remove(int offset,int lengtt)版本,但得到了相同的异常
对此有什么想法吗?
发布于 2012-07-04 03:05:39
好的,问题是
vn.getElementFragment()返回的长度错误。可能是因为(在我的测试文件中)样式元素后面紧跟着注释和注释字符,并且长度超过了应有的长度
这解决了所有问题
int o = (int)vn.getElementFragment();
int l = (int)(vn.getElementFragment() >> 32);
final String s = new String(vn.getXML().getBytes(o, l));
l = s.substring(0, s.indexOf("</style>")+8).length(); // ;]
modifier.removeContent(o, l);
modifier.insertBeforeElement(replaceString);希望它能帮助到某些人
https://stackoverflow.com/questions/11284479
复制相似问题