【问题标题】:Real time reading of XML tag in JSPJSP中XML标签的实时读取
【发布时间】:2014-03-05 04:12:35
【问题描述】:

设置: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% 确定我尝试做的事情是可能的,而且似乎没有很多关于它的信息。如果有人可以提供任何提示,将不胜感激。

【问题讨论】:

    标签: xml jsp debugging xml-parsing runtime-error


    【解决方案1】:

    我可能不完全理解这个问题,但基于:if (div id="title" == France) 听起来您正在尝试解析和编辑您输出的 HTML,您在此处输出一些 HTML:out.println(content);这是不可能的你无法将输出的 HTML 读回到 Java 中) 以下是一些可供考虑的可能解决方法:

    1. 将“内容”保存为变量 java 变量,以便以后在比较中进一步使用(我会简化它,只保存您想要的数据部分) - 我认为这可能会在缩放时出现问题.
    2. 在将任何内容输出到页面之前,将所有比较和检查都放在同一个代码块中
    3. 使用一些 AJAX 来处理后面的逻辑——(使用 Javascript 来检查页面上的某些功能,并可能调用一个控制器 servlet 来处理它)
    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
      
      }
      

    我敢肯定还有其他解决方案,但这是我马上能想到的。希望这会有所帮助。

    【讨论】:

    • 我使用了选项 1 的变体。然后我使用 indexOf 尝试确定 XML 标记的内容。
    【解决方案2】:

    使用转换读取 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 attribute 代替更复杂的逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多