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( "オフセット..とオフセットの間で無効な挿入/削除条件が検出されました")が発生しました。これがそのためのコードです

      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

OK、問題は

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 に答える