1

我遇到了奇怪的问题,我在网上找不到任何东西。

我使用 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("Invalid insert/deletion condition detected between offset .. and offset")。这是代码

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

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

任何想法

4

1 回答 1

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

希望它会帮助某人

于 2012-07-03T19:05:39.163 回答