首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vtd-xml替换整个元素

vtd-xml替换整个元素
EN

Stack Overflow用户
提问于 2012-07-02 02:11:42
回答 1查看 684关注 0票数 1

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

我正在使用xpath来定位我的xml块,然后用其他东西替换它,例如:

代码语言:javascript
复制
// input
<html>
    ...
    <style type="">
        background: yellow;
    </style> 
    <link href="path" /> 
</html>


// output
<html>
    ...
    <link href="pathToFileWithBackground" />
    <link href="path_other" /> 
</html>

我使用XMLModifier来实际更新令牌(使用updateToken方法:]),它用于属性操作或元素的文本(正文)。

我有样式元素的问题,我想处理它的主体,然后用链接到某个文件替换整个元素。

显然,更新文本标记将导致样式标记内部带有链接标记。

代码语言:javascript
复制
    <style type=""><link href="path" />
    </style>

因此,我尝试将导航器移动到样式元素,得到以下结果

代码语言:javascript
复制
    <<link href="path" /> type="">
        background: yellow;
    </style> 

我还尝试在样式元素之前插入链接元素并将其移除,但当我试图保存修饰符的数据时,从XMLModifier得到了ModifyException(“在offset ..和offset之间检测到无效的插入/删除条件”)。下面是实现该功能的代码

代码语言:javascript
复制
      ap.selectXPath("//style/text());
      vn.toElement(VTDNav.PARENT);                  
      modifier.insertBeforeElement(replaceString);  
      modifier.remove();                                                

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

对此有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-04 03:05:39

好的,问题是

代码语言:javascript
复制
vn.getElementFragment()

返回的长度错误。可能是因为(在我的测试文件中)样式元素后面紧跟着注释和注释字符,并且长度超过了应有的长度

这解决了所有问题

代码语言:javascript
复制
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);

希望它能帮助到某些人

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11284479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档