簡體   English   中英

在JSP中解析XML的問題

[英]Issue in parsing an XML in JSP

我正在嘗試使用DOM方法在JSP中解析XML。 下面是XML:

<?xml version="1.0" encoding="UTF-8"?>
<apis xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
    <api name="getFormFields" requesttype ="GET">
         <url>/fieldtype/</url>       
         <parameters>
             <parameter><![CDATA[fieldtype=textbox&fieldId=8668376496495]]></parameter>
          </parameters>
    </api>
 </apis>

我想讀取<parameters>標記,顯示參數值,但不能這樣做。 以下是我正在使用的JSP。 該JSP顯示URL, <api> namerequesttype 我還想要<parameters>並單擊“提交”,我想將此數據發送到腳本。 我沒有這樣做。

<%@page contentType="text/html;charset=UTF-8"%>
<%@page pageEncoding="UTF-8"%>
<%@ page session="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@page import="org.w3c.dom.*, javax.xml.parsers.* ,java.io.File,java.util.*, javax.servlet.http.*"%>
<%
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    Document doc = docBuilder.parse(new File(
    "C:\\Documents and Settings\\Desktop\\apc.xml"));
%>
<%!
    public boolean isTextNode(Node n){
        return n.getNodeName().equals("#text");
    }
%>
<html>
<head>
    <META http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title><fmt:message key="welcome.title"/></title>
    <link rel="stylesheet" href="<c:url value="/resources/blueprint/screen.css" />" type="text/css" media="screen, projection">
    <link rel="stylesheet" href="<c:url value="/resources/blueprint/print.css" />" type="text/css" media="print">

</head>
<body>
<script type="text/javascript">

var xmlStr="\n";

function showData()
{
    alert('here');


xmlStr="\n";
var pageNumber;
if(document.forms[0].services[0].checked||document.forms[0].services[1].checked)
{
 if(document.forms[0].services[1].checked)
 {
     alert(document.forms[0].services[0].checked);
     var urlData = document.getElementById('urlData').value;
        alert(urlData);

  }

}
}
</script>
<form name="myForm">
<h2><font color='green'>List of Service Api</font></h2>
        <table border="2">
            <tr>

                <th>Methods</th>
                    <th>Request Type</th>
                <th>URL</th>

            </tr>
                <%

                    doc.getDocumentElement().normalize();
                    Element  element = doc.getDocumentElement(); 
                    NodeList apiNodes = element.getChildNodes();     
                    for (int i=0; i<apiNodes.getLength(); i++){
                        Node nodeApi = apiNodes.item(i);

                        if (isTextNode(nodeApi))
                            continue;
                        NodeList url = nodeApi.getChildNodes(); 
                %>

            <tr>
            <td>

                 <input type="hidden" name="apiNames" value="<%= apiNodes.item(i).getAttributes().item(0) %>"/>
                <input type="radio" name="services" value="0"><%= apiNodes.item(i).getAttributes().item(0) %></td>
                <td><input type="hidden" name="requestType" value="<%= apiNodes.item(i).getAttributes().item(1) %>"/><%= apiNodes.item(i).getAttributes().item(1) %></td>
                <%
                    for (int j=0; j<url.getLength(); j++ ){
                        Node node = url.item(j);
                        if ( isTextNode(node)) 
                            continue;
                %>

                <td><input type="hidden" name="urlData" value="<%= node.getFirstChild().getNodeValue() %>"/><%= node.getFirstChild().getNodeValue() %></td>
                <%
                    } 
                %>



            </tr>
            <br>


                <%
                    }
                %>
                <td> <button name="SubmitRequest" onclick="showData();">Submit Request</button></td>
        </table>
     <textarea name="response" cols="150" rows="120"></textarea>
       </form>
     </body>
</html>

使用純DOM遍歷解析XML文件始終很麻煩。 例如,使用JAXB可以避免這種情況。

但是,如果您確實願意,我建議嘗試a)使用其名稱而不是使用它們在DOM樹中的位置來訪問XML標簽,以及b)使用getContextText()訪問內容。 這對於相當簡單的XML文件來說效果很好。 您可以在下面找到一個示例,然后其他值類似:

    <%
    NodeList apis = doc.getElementsByTagName("api");
    for (int i=0; i < apis.getLength(); i++) {
      Element api = (Element) apis.item(i); //the cast works if you really used a tag name in getElementsByTagName()
      Element url = (Element) api.getElementsByTagName("url").item(0);
      String urlContent = url.getTextContext().trim(); //trim gets rid of nasty whitespace like \n 

    %>
    <td><input type="hidden" name="urlData" value="<%=urlContent%>"/><%=urlContent%></td>
    <%
    }
    %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM