2015-09-13 3 views
0

Я пишу инструмент плагина eclipse, который исправит проблему атрибута html. В коде пользовательского интерфейса используется весна и несколько других фреймворков. Когда я разбираю и записываю файл, эти теги не записываются должным образом. У меня также есть тег <script>; который не имеет значения, как ожидалось. Я хочу «< #», «< @» быть нетронутым или написано правильно. пожалуйста помоги.Пропуск/Разбор специальных тегов

Входной код ----------

<#macro contentcol> 
    <p data-taganalytics="trackSection" data-taglocation="AddABankAccount"> 
     <a href="#" id="faq" class="btnSmall jq-modal" role="button" rel="<@spring.message "linkaccount.addaccount.faq.questionid" />"> 
       <@spring.message "linkaccount.addaccount.faq.text" /> 
     </a> 
    </p> 

    <#if (spring.status?? && spring.status.errorMessages?exists && spring.status.errorMessages?is_sequence && spring.status.errorMessages?size > 0) > 
     <@tom.message style="error"> 
      <p> 
       <strong> 
        <#list spring.status.errorMessages as error> 
          <li>${error}</li> 
        </#list> 
       </strong> 
      </p> 
     </@tom.message> 
    </#if>    

Код выхода ----------

<html><head></head><body>&lt;#macro contentcol&gt; 
    <p data-taganalytics="trackSection" data-taglocation="AddABankAccount"> 
     <a href="#" id="faq" class="btnSmall jq-modal" role="button" rel="&lt;@spring.message " linkaccount.addaccount.faq.questionid"=""></a>&quot;&gt; 
       &lt;@spring.message &quot;linkaccount.addaccount.faq.text&quot; /&gt; 

    </p> 

    &lt;#if (spring.status?? &amp;&amp; spring.status.errorMessages?exists &amp;&amp; spring.status.errorMessages?is_sequence &amp;&amp; spring.status.errorMessages?size &gt; 0) &gt; 
     &lt;@tom.message style=&quot;error&quot;&gt; 
      <p> 
       <strong> 
        &lt;#list spring.status.errorMessages as error&gt; 
          </strong></p><li><strong>${error}</strong></li><strong> 
        <!--#list--> 
       </strong> 
      <p></p> 
     <[email protected]> 
    <!--#if-->    

Это мой Parser Read Код:

htmlFile = DocumentUtil.fixCompliance(Jsoup.parse(in, "ISO-8859-1")); 

Это мой Написать код:

Document.OutputSettings settings = document.outputSettings(); 

settings.prettyPrint(false); 

settings.escapeMode(Entities.EscapeMode.base); 

settings.charset("ASCII") 

System.out.println(document.html().toString()); 

writer = new PrintWriter(in, "ASCII"); 

writer.write(document.html()); 

writer.flush(); 

writer.close(); 

Пробовал как UTF-8 и ASCII

+1

Я думаю Jsoup не предназначен для этого. Конечно, вы можете попробовать настроить whiltlist (http://jsoup.org/apidocs/org/jsoup/safety/Whitelist.html) для синтаксического анализа, но в основном Jsoup предназначен для анализа html, который готов к визуализации, а не шаблоны с дополнениями исходного кода. – luksch

ответ

0

мне пришлось изменить Jsoup исходный код, чтобы соответствовать моим требованиям. Ниже внесены изменения, проверьте комментарий к строке.

TokeniserState.java

EndTagOpen { 
    void read(Tokeniser t, CharacterReader r) { 
     if (r.isEmpty()) { 
      t.eofError(this); 
      t.emit("</"); 
      t.transition(Data); 
     } else if (r.matchesLetter()) { 
      t.createTagPending(false); 
      t.transition(TagName); 
     } else if (r.matches('>')) { 
      t.error(this); 
      t.advanceTransition(Data); 
     } 
     else if (r.matches('#') || r.matches('@')) { // Added this condition 
      t.error(this); 
      t.emit("</"); 
      t.transition(Data); 
     } 
     else { 
      t.error(this); 
      t.advanceTransition(BogusComment); 
     } 
    } 

Entities.java

if (codePoint < Character.MIN_SUPPLEMENTARY_CODE_POINT) { 
      final char c = (char) codePoint; 
      switch (c) { 
       case '&': 
        accum.append("&amp;"); 
        break; 
       case 0xA0: 
        if (escapeMode != EscapeMode.xhtml) 
         accum.append("&nbsp;"); 
        else 
         accum.append("&#xa0;"); 
        break; 
       case '<': 
        if (!inAttribute || escapeMode == EscapeMode.xhtml) 
         accum.append("<"); //Modified this line 
        else 
         accum.append(c); 
        break; 
       case '>': 
        if (!inAttribute) 
         accum.append(">"); ///Modified this line 
        else 
         accum.append(c); 
        break;