Чтение тега XML в реальном времени в JSP

Установка: iMac 10.6.8, Apache Tomcat 6.0.16, база данных eXist, JSP, Java, XML

У меня есть страница JSP, которая используется для получения запросов ключевых слов от пользователей и возврата содержимого XML.

В зависимости от содержимого тега XML заголовка, возвращаемого пользователю, я также хочу отображать дополнительный контент, извлеченный из внешнего проекта Java.

Мой JSP для извлечения XML-контента

<div class='result-container'>
<%          
            (more code here to call content from XML database and transform)

            content = AE.getPrettyModelContent("ae", username + "transformedFeatureModel");
            out.println(content);
%>
</div>

Этот контент выводится с множеством тегов, которые затем используются для стилизации, например.

<title>France</title>

Выводится как

<div id="title">France</div> 

Я хочу выполнить другое действие на моей странице JSP в зависимости от содержимого приведенного выше тега.

Моя попытка до сих пор

<div class='concept-container'>
<%

Injector injector = Guice.createInjector(new GuiceInjector());
ConceptConnector myConceptFrance = injector.getInstance(ConceptConnector.class);

if (div id="title" == France)
{
out.println(myConceptFrance.search(myConceptFrance));
} 

%>
</div>

Ошибка

An error occurred at line: 150 in the jsp file: /SimpleResponse2.jsp
div cannot be resolved
149: 
150:    if (div id="title" == France)
151:    {
152:    out.println(myConceptFrance.search(myConceptFrance));
153:    }

Я не на 100% уверен, что то, что я пытаюсь сделать, возможно, и, похоже, об этом не так много информации. Если кто-то может дать какие-либо советы, это будет очень признательно.


person Deepend    schedule 03.07.2012    source источник


Ответы (2)


Возможно, я не совсем понимаю вопрос, но на основе: if (div id="title" == France) похоже, что вы пытаетесь проанализировать и отредактировать HTML-код, который вы выводите, какой-то HTML-код, который вы выводите здесь: out.println(content);. Это невозможно (вы не можете прочитать выходной HTML-код обратно в Java). Вот несколько возможных обходных путей:

  1. Сохраните «контент» как переменную java-переменной, которая будет использоваться в дальнейшем в сравнениях позже (я бы упростил ее, сохранив только ту часть данных, которую вы хотите) - я думаю, что это может вызвать проблемы при масштабировании.
  2. Поместите сравнения и проверки в один и тот же блок кода перед выводом чего-либо на страницу.
  3. Используйте некоторый AJAX для обработки более поздней логики - (используйте Javascript для проверки определенных функций на странице и, возможно, вызовите сервлет контроллера, который действует на это)
  4. Вместо того, чтобы напрямую использовать out.println(), когда вы хотите что-то добавить на страницу, используйте StringBuffer или что-то еще, чтобы сохранить копию того, что вы печатаете, чтобы вы могли искать ее позже. -- Может быть (если вам не нужно что-то манипулировать после печати, вы делаете out.println И записываете это в StringBuffer, тогда вы можете искать, см. Ниже:

    public static void main(String[] args){
        StringBuffer sb = new StringBuffer();
        sb.append("<div id=\"additionalData\">Italy</div> <div id=\"title\">France</div> ");
        System.out.println(sb.indexOf("id=\"title\">France</div>") > -1); // output true
        System.out.println(sb.indexOf("id=\"title\">Italy</div>") > -1); // outputs false
    
    }
    

Я уверен, что есть и другие решения, но это то, о чем я могу думать сразу. Надеюсь это поможет.

person th3byrdm4n    schedule 11.07.2012
comment
Я использовал вариант варианта 1. Затем я использовал indexOf, чтобы попытаться определить содержимое тега XML. - person Deepend; 23.08.2012

Используйте преобразование для чтения XML, затем добавьте инструкцию, используя условный оператор и jsp:scriptlet, который будет выглядеть примерно так:

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page">
<!--...-->

 <xsl:template match="title">
  <!-- Output div with ID and value-->
  <div id="local-name(.)"><xsl:value-of select="."/></div>
  <!-- Check for France -->
  <xsl:if test="current() = 'France' ">
    <!-- Call instruction using scriptlet -->
    <jsp:scriptlet>out.println(myConceptFrance.search(myConceptFrance));</jsp:scriptlet>
  </xsl:if>
 </xsl:template>

Используйте атрибут режима mode вместо более сложной логики.

person Paul Sweatte    schedule 12.07.2012