JSP DOM解析器

<!--
Sams Teach Yourself JavaServer Pages in 21 Days (Paperback)
by Steven Holzner (Author), Steve Holzner (Author)

# Publisher: Sams; 1st edition (September 192002)
# Language: English
# ISBN-100672324490
# ISBN-13978-0672324499
-->

<%@ page import="javax.xml.parsers.*, org.xml.sax.*, org.xml.sax.helpers.*, org.w3c.dom.*, java.io.*"
 %>

<%!
public class xparser 
{
    String displayStrings[] new String[1000];
    int numberDisplayLines = 0;

    public String[] displayDocument(String uri
    {
        try {

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

        DocumentBuilder db = null;
        try {
            db = dbf.newDocumentBuilder();
        
        catch (ParserConfigurationException pce) {}

        Document document = null;
        document = db.parse(uri);

        numberDisplayLines = 0;
        display(document, "");

        catch (Exception e) {
            e.printStackTrace(System.err);
        }

        return displayStrings;
    

    public void display(Node node, String indent
    {
        if (node == null) {
            return;
        }

        int type = node.getNodeType();

        switch (type) {
            case Node.DOCUMENT_NODE: {
                displayStrings[numberDisplayLines= indent;
                displayStrings[numberDisplayLines+= "&lt;?xml version=\"1.0\" encoding=\""+
                  "UTF-8" "\"?&gt;";
                numberDisplayLines++;
                display(((Document)node).getDocumentElement()"");
                break;
             }

             case Node.ELEMENT_NODE: {
                 displayStrings[numberDisplayLines= indent;
                 displayStrings[numberDisplayLines+= "&lt;";
                 displayStrings[numberDisplayLines+= node.getNodeName();

                 int length = (node.getAttributes() != null? node.getAttributes().getLength() 0;
                 Attr attributes[] new Attr[length];
                 for (int i = 0; i < length; i++) {
                     attributes[i(Attr)node.getAttributes().item(i);
                 }

                 for (int i = 0; i < attributes.length; i++) {
                     Attr attribute = attributes[i];
                     displayStrings[numberDisplayLines+= " ";
                     displayStrings[numberDisplayLines+= attribute.getNodeName();
                     displayStrings[numberDisplayLines+= "=\"";
                     displayStrings[numberDisplayLines+= attribute.getNodeValue();
                     displayStrings[numberDisplayLines+= "\"";
                 }
                 displayStrings[numberDisplayLines+= "&gt;";

                 numberDisplayLines++;

                 NodeList childNodes = node.getChildNodes();
                 if (childNodes != null) {
                     length = childNodes.getLength();
                     indent += "&nbsp;&nbsp;&nbsp;&nbsp;";   
                     for (int i = 0; i < length; i++ ) {
                        display(childNodes.item(i), indent);
                     }
                 }
                 break;
             }

             case Node.CDATA_SECTION_NODE: {
                 displayStrings[numberDisplayLines= indent;
                 displayStrings[numberDisplayLines+= "&lt;![CDATA[";
                 displayStrings[numberDisplayLines+= node.getNodeValue();
                 displayStrings[numberDisplayLines+= "]]&gt;";
                 numberDisplayLines++;
                 break;
             }

             case Node.TEXT_NODE: {
                 displayStrings[numberDisplayLines= indent;
                 String newText = node.getNodeValue().trim();
                 if(newText.indexOf("\n"&& newText.length() 0) {
                     displayStrings[numberDisplayLines+= newText;
                     numberDisplayLines++;
                 }
                 break;
             }

             case Node.PROCESSING_INSTRUCTION_NODE: {
                 displayStrings[numberDisplayLines= indent;
                 displayStrings[numberDisplayLines+= "&lt;?";
                 displayStrings[numberDisplayLines+= node.getNodeName();
                 String text = node.getNodeValue();
                 if (text != null && text.length() 0) {
                     displayStrings[numberDisplayLines+= text;
                 }
                 displayStrings[numberDisplayLines+= "?&gt;";
                 numberDisplayLines++;
                 break;
            }    
        }

        if (type == Node.ELEMENT_NODE) {
            displayStrings[numberDisplayLines= indent.substring(0, indent.length() 24);
            displayStrings[numberDisplayLines+= "&lt;/";
            displayStrings[numberDisplayLines+= node.getNodeName();
            displayStrings[numberDisplayLines+= "&gt;";
            numberDisplayLines++;
            indent += "    ";
        }
    
}
%>

<HTML>
  <HEAD>
    <TITLE>Parsing an XML Document With DOM</TITLE>
  </HEAD>

  <BODY>
    <h1>Parsing an XML Document With DOM</h1>

    <% xparser p = new xparser()

        String[] s = p.displayDocument(application.getRealPath("/""test.xml");
 
        for(int i = 0; i < s.length; i++){
            if(s[i!= null){
    %>
            <%= s[i%><BR>
    <%
            }
        }
    %>
    </BODY>
</HTML>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值