2010年2月11日木曜日

[java][dom]テキストノードをタグでラップする

DOM APIの使用例です。
---
/**
 * <code>org.w3c.dom</code>のテキストノードを、新しい要素の子に移動できるか。
 * @throws Exception
 */
@Test
public void testNonMethod_MoveTextNodeToNewElement() throws Exception{
  String xml = "<html><head/><body><h1>クラス Pattern</h1>コンパイル済みの正規表現です。" + 
  "<h1>クラス Matcher</h1>マッチ操作を行うエンジンです。</body></html>";
  Document doc = DomUtils.stringToDocument(xml);
  //bodyの子要素のテキストノードを<font color="red"></font>要素で囲みます。
  NodeList nodeList = DomUtils.findNodesByXPath(doc, "/html/body/node()");
  for(int i=0;i<nodeList.getLength();i++){
    Node node = nodeList.item(i);
    if(node.getNodeType() == Node.TEXT_NODE){
      //親を呼び出します。
      Node parent = node.getParentNode();
      //新しい要素を生成します。
      Element newElement = doc.createElement("font");
      newElement.setAttribute("color", "red");
      //ノードの挿入は親に頼みます。
      parent.insertBefore(newElement, node);
      //テキストノードを、挿入された新しい要素の子に移動します。元の場所から削除する必要はありません。
      newElement.appendChild(node);
    }
  }
  String actual = DomUtils.nodeToString(doc);
  System.out.println(actual);
}
---
DomUtilsクラスは自作のクラスです。メソッド名から実装を想像してください。^ ^;


出力結果
---
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   </head>
   <body>
      <h1>クラス Pattern</h1><font color="red">コンパイル済みの正規表現です。</font><h1>クラス Matcher</h1><font color="red">マッチ操作を行うエンジンです。</font></body>
</html>
---
ではまた。

0 件のコメント:

コメントを投稿