0

我正在尝试使用 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>
4

1 回答 1

0

使用纯 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>
    <%
    }
    %>
于 2012-02-10T07:29:50.833 回答