2017-04-23 22 views
0

私はナッチで遊んでいます。私はDOM構造内の特定のノードを検出し、ノードの周りからテキストデータを抽出することも含む何かを書こうとしています。例えば親ノードからのテキスト、兄弟ノードなど。私はいくつかの例を研究して読んだ後、画像ノードに対してこれを行うプラグインを作成しようとしました。コードの一部ノードの周囲のテキストを取得する方法は?

if("img".equalsIgnoreCase(nodeName) && nodeType == Node.ELEMENT_NODE){ 
      String imageUrl = "No Url"; 
      String altText = "No Text"; 
      String imageName = "No Image Name"; //For the sake of simpler code, default values set to 
               //avoid nullpointerException in findMatches method 

      NamedNodeMap attributes = currentNode.getAttributes(); 
      List<String>ParentNodesText = new ArrayList<String>(); 
      ParentNodesText = getSurroundingText(currentNode); 

      //Analyze the attributes values inside the img node. <img src="xxx" alt="myPic"> 
      for(int i = 0; i < attributes.getLength(); i++){ 
       Attr attr = (Attr)attributes.item(i); 
       if("src".equalsIgnoreCase(attr.getName())){ 
        imageUrl = getImageUrl(base, attr); 
        imageName = getImageName(imageUrl); 
       } 
       else if("alt".equalsIgnoreCase(attr.getName())){ 
        altText = attr.getValue().toLowerCase(); 
       } 
      } 

    private List<String> getSurroundingText(Node currentNode){ 

    List<String> SurroundingText = new ArrayList<String>(); 
    while(currentNode != null){ 
     if(currentNode.getNodeType() == Node.TEXT_NODE){ 
      String text = currentNode.getNodeValue().trim(); 
      SurroundingText.add(text.toLowerCase()); 
     } 

     if(currentNode.getPreviousSibling() != null && currentNode.getPreviousSibling().getNodeType() == Node.TEXT_NODE){ 
      String text = currentNode.getPreviousSibling().getNodeValue().trim(); 
      SurroundingText.add(text.toLowerCase()); 
     } 
     currentNode = currentNode.getParentNode(); 
    } 
    return SurroundingText; 
} 

これは正しく動作していないようです。 imgタグが検出され、イメージ名とURLが取得されますが、それ以上のヘルプはありません。 getSurroundingTextモジュールはあまりにも醜いように見えますが、私は試しましたが、改善できませんでした。イメージに関連する可能性のあるテキストをどこからどのように抽出すればよいのか、明確なアイデアはありません。助けてください?

答えて

1

あなたは正しい軌道に乗っている、一方、この例のコードのHTMLを見てみましょう:あなたのケースで

<div> 
    <span>test1</span> 
    <img src="http://example.com" alt="test image" title="awesome title"> 
    <span>test2</span> 
</div> 

、私はこの問題は、の兄弟ノードであることを考えますimgノードの場合、直系の兄弟を探しているとします。前の例では、ノードがspanのノードであると思われるかもしれませんが、この場合ダミーテキストノードなので、imgの兄弟ノード実際のテキストがないこの空のノードを取得します。

以前のHTMLを<div><span>test1</span><img src="http://example.com" alt="test image" title="awesome title"><span>test2</span></div>と書き直すと、imgの兄弟ノードは、spanのノードになります。

私は前の例で "text1"と "text2"の両方を取得したいと仮定しています。その場合、実際には移動してからNode.ELEMENT_NODEを見つけてそのノード内のテキストを取得する必要があります。 1つの良い習慣は、あなたが見つけるものをつかむことではなく、精度を向上させるために範囲をpspandivに制限することです。

関連する問題