2013-03-28 2 views
0

У меня есть документ HTML, в котором мне нужно обновить атрибут text и src тега IMG. Я работаю на Java. Я хочу заменить следующие строки в HTML: DataName, DataText и DataIcon.Замена атрибута src в теге IMG в Java

<body> 

<h1 align="center">DataName</h1> 

<div class="tabber"> 

    <div class="tabbertab"> 
     <h2>Info</h2> 
     <p>DataText</p> 
    </div> 


    <div class="tabbertab"> 
     <h2>Pictures</h2> 
     <div id="album"> 
      <ul class="gallery"> 
       <li><a href="#nogo" tabindex="1">1<img src=DataIcon alt="landscape image 1" title="landscape image 1" /></a></li> 
       <li><a href="#nogo" tabindex="1">2<img src="C:\thesis\100GreatP\eclipse_ws\test\data\pictures\1\pyramid2.jpg" alt="landscape image 2" title="landscape image 2" /></a></li> 
      </ul> 
     </div> 
    </div> 

    <div class="tabbertab"> 
     <h2>Video</h2> 

    </div> 

</div> 

В то время как я suceeded заменить струны DataName и DataText, я гавань успеха заменить DataIcon мой ImageUrl, хранящейся в базе данных в виде строки. Проверка debug говорит, что просто просто не удается найти строку DataIcon. Я использую HTMLparser и я написал следующий класс, чтобы применить эту проблему:

public class MyNodeVisitor extends NodeVisitor { 
     String name; 
     String text; 
     String icon; 

     public MyNodeVisitor() { 

     } 

     public MyNodeVisitor(String IconPath, String Name, String Text){ 
      this.name = Name; 
      this.text = Text; 
      this.icon = IconPath; 
     } 

     public void visitStringNode (Text string) 
     { 
      if (string.getText().equals("DataName")) { 
       string.setText(name); 
      } 

      else if(string.getText().equals("DataIcon")){ 
        string.setText(icon); 

      } 
      else if (string.getText().equals("DataText")){ 
        string.setText(text); 
      } 
     } 
    } 

Класс был применен в моем коде приложения таким образом

 NodeList nl = new NodeList(); 
     String htmlString = null; 
     InputStream contentStream = null; 
     String textString = null;  
     String resultStr = getDatabaseAttribute(name,"DESCRIPTION"); 
     String resultStr2 = getDatabaseAttribute(name,"NAME"); 
     String resultStr3 = getDatabaseAttribute(name,"ICON_path"); 


     try 
     { 
      // Read the URL content into a String using the default encoding (UTF-8). 
     contentStream = WWIO.openFileOrResourceStream(BROWSER_BALLOON, this.getClass()); 
      htmlString = WWIO.readStreamToString(contentStream, null); 

     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      WWIO.closeStream(contentStream, resultStr); 
     } 


     try { 
      Parser parser = new Parser(htmlString); 
      nl = parser.parse(null); 

      nl.visitAllNodesWith(new MyNodeVisitor(resultStr3, resultStr2,resultStr)); 
      nl.toString(); 

     } catch (ParserException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     String output = nl.toHtml(); 

     return output; 

Может кто-нибудь мне помочь? Вся проблема в том, что он не ищет строку DataIcon в теге IMG. Спасибо за вашу помощь.

ответ

1

Ваш img тег не является StringNode. Вы должны переопределить visitTag (тег тега) метод и работайте над Tag объект.

Нечто подобное (не компилируется)

public void visitTag(Tag tag) { 
    if ("img".equals(tag.getTagName())) { 
     if ("DataIcon".equals(tag.getAttribute("src"))) { 
      tag.setAttribute("src", icon); 
     } 
    }   
} 
+0

Спасибо за ваш вклад! Я немного изменил метод, так как он не работал полностью на вашем пути, первый оператор if - это (Tag isinstanceof ImageTag). Однако ты мне очень помог, спасибо! – MichalB

Смежные вопросы