vtd-xml替换整个元素

时间:2012-07-01 18:11:42

标签: vtd-xml

我遇到了一个奇怪的问题,我无法在网上找到任何东西。

我使用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> 

我还尝试在样式元素之前插入link元素并将其删除但是当我尝试保存修改器的数据时,我从XMLModifier获得了ModifyException(“在offset ..和offset之间检测到无效的插入/删除条件”)。这是

的代码
      ap.selectXPath("//style/text());
      vn.toElement(VTDNav.PARENT);                  
      modifier.insertBeforeElement(replaceString);  
      modifier.remove();                                                

我尝试使用remove(long l)和remove(int offset,int lengtt)版本但是得到了相同的异常

关于那个的任何想法

1 个答案:

答案 0 :(得分:3)

好的,问题出在

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);

希望它会帮助某人