2012-07-01 69 views
1

我遇到了一個奇怪的問題,我無法在網上找到任何東西。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> 

我還試圖樣式元素之前插入鏈接元件和除去它,但我得到之間ModifyException(「檢測到無效的插入/刪除條件偏移量和偏移量「)來自XMLModifier,當我嘗試保存修改器的數據時。這裏是該

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

我試圖用刪除(長L)和刪除代碼(INT抵消,詮釋lengtt)版本,但得到了同樣的異常

回答

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

希望這會幫助別人

+0

燦你發送一個測試文件,可以幫助我們解決這個問題? –