XMLについて

8103 ワード

今日はちょうど一人でXMLの宿題を完成しました.以前はXMLの関連文法を熟知しているだけで、Codingにわざわざ遊びに来たわけではないので、あまり詳しくないです.今回もこの機会に遊んでみましたが、収穫が多いと感じました.今まで真剣に考えたことのない問題をいくつか発見しました.
      1、javascriptは通常クライアント(ブラウザ)でXMLを操作していますが、XMLを保存する権限はありません.もちろん、これはサンドボックスのセキュリティポリシーによるものです.
      2、jspを通じてXMLの保存操作を行います.特に注意したいのはxmlファイルの力の問題です.tomcatをサーバーとして使うので、関連のXMLファイルをtomcatのbinディレクトリの下に置くだけです.そうでないと、経路の問題が分からないと、ファイルが見つからなくてエラーが発生しやすいです.私はrequest.getRealPath(/)+\ceshi.xmlを使って経路問題を処理した.これはWebRootディレクトリのceshi.xmlです.
      3、xmlについてDMDを使用しています.つまり、ドキュメントの種類の定義です.ファイルの読み込み中にエラーが発生しやすいです.関連する文書タイプ定義ファイルが見つからないからです.今はまだ比較的適切な処理方法を見つけていません.
ドキュメントタイプ定義(DMD)は、合法的なXMLドキュメント構築モジュールを定義することができます.これは一連の合法的な要素を使ってドキュメントの構造を定義します.
DMDは、XMLドキュメント内で行音響的に明らかにすることができ、外部参照としてもよい.
      4、簡単に実現するために、ネット上の一例を使って改善しましたが、関連のXMLファイルを提供していませんので、知らない人にとっては大きな挫折だと思います.そのため、その部分を追加して、後から来る人に便利さをもたらしたいです.
<%@ page contentType="text/html;charset=utf-8" %> 

<%@ page import = "java.io.*,java.util.*,org.jdom.*,org.jdom.input.*,org.jdom.output.*,javax.xml.xpath.*;" %>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<html>



<head>

<title>Basic News Page</title>

<style type="text/css"><!--td {font-size:12px}--></style>

</head>

 <base href="<%=basePath%>">

<body>

<%

 String t = request.getParameter("t")!=null?request.getParameter("t"):"";

 String s = request.getParameter("s")!=null?request.getParameter("s"):"";

 String d = request.getParameter("detail")!=null?request.getParameter("detail"):"";

 String delete = request.getParameter("delete")!=null?request.getParameter("delete"):"";

 String id = request.getParameter("id")!=null?request.getParameter("id"):"";

 SAXBuilder sb = new SAXBuilder();

 String indent = " ";

 boolean newLines = true;

 Format format = Format.getPrettyFormat();

 format.setEncoding("GB2312");

    XMLOutputter outputter = new XMLOutputter(format);



 String flag = request.getParameter("flag")!=null?request.getParameter("flag"):"false";

 if(flag.equals("true"))

 {

  byte[] b = t.getBytes("iso8859-1");

  String ti = new String(b,"utf-8");

  byte[] b2 = s.getBytes("iso8859-1");

  String si = new String(b2,"utf-8");

  byte[] b3 = d.getBytes("iso8859-1");

  String di = new String(b3,"utf-8");

  try

         {

              Document doc=sb.build(new FileInputStream(request.getRealPath("/")+"\\ceshi.xml"));

              Element root=doc.getRootElement();

              List list=root.getChildren();

              Element article = new Element("message");

              article.setAttribute("id",(list.size()+10001)+"");

              article.addContent(new Element("title").setText(ti));

              article.addContent(new Element("content").setText(di));

              article.addContent(new Element("time").setText(si));

              doc.getRootElement().addContent(article);

              outputter.output(doc,new FileOutputStream(request.getRealPath("/")+"\\ceshi.xml"));

         }

         catch(Exception e)

         {

              e.printStackTrace();

         }

  s = "";

  d = "";

  t = "";

 }

 if(delete.equals("true"))

 {

 	  	//new XmlFile().removeContent(request.getRealPath("/")+"\\ceshi.xml",Integer.parseInt(id));

 }

%>

<form action="OperBasic.jsp" method="post">

<table width="80%" border="0" bgcolor="#FFE4C4" cellspacing="1" cellpadding="1" align="center">

<tr><td colspan="2">Add Basic News :</td></tr>

<tr>

<td>Title:</td><td><input type="text" name="t" value="<%=t%>" maxlength="60" format="*N" style="border-width:1; border-color:black; border-style:solid;"/></td></tr>

<tr><td>Time/Author:</td><td><input type="text" name="s" value="<%=s%>" maxlength="20" format="*N" style="border-width:1; border-color:black; border-style:solid;"/></td></tr>

<tr><td>Content:</td><td><textarea name="detail" rows="10" cols="66" style="border-width:1; border-color:black; border-style:solid;"></textarea><br/>  

</td>

<tr><td colspan=2 align="center"><input type="submit" name="submit" value="Add"/></td>

<input type="hidden" name="flag" value="true" maxlength="20" format="*N"/>

</tr>

</table>

</form>

<table width="80%" border="0" bgcolor="000000" cellspacing="1" cellpadding="1" align="center"><tr><td bgcolor="FF7Dff">ID</td><td bgcolor="FF7Dff">Title</td><td bgcolor="FF7Dff">Content</td><td bgcolor="FF7Dff">Time / Author</td><td bgcolor="FF7Dff">Delete</td></tr>

<%

Document doc=null ;

	try

	{

  doc = sb.build(new File(request.getRealPath("/")+"\\ceshi.xml"));

  }

  catch(Exception e)

  {

  	SAXBuilder builder = new SAXBuilder();

	// Create the document

	doc = builder.build(new File(request.getRealPath("/")+"\\ceshi.xml"));

  

  }

   try

 {

  Element root = doc.getRootElement();

  List list = root.getChildren();

  out.println("all:"+list.size());

             for(int i=0;i<list.size();i++)

             {

   Element item = (Element)list.get(i);

   String name = item.getAttribute("id").getValue();

   out.println("<tr><td width=5% height=30 align=left bgcolor=FF7D00>"+name+"</td>");

   Element sub = item.getChild("title");

   String text = sub.getText();

   out.println("<td width=10% height=30 align=left bgcolor=FF7D00>"+ text+"</td>");

   Element sub2 = item.getChild("content");

   String text2 = sub2.getText();

   out.println("<td width=50% align=left bgcolor=FF7D00>"+ text2+"</td>");

   Element sub3 = item.getChild("time");

   String text3 = sub3.getText();

   out.println("<td width=10% align=left bgcolor=FF7D00>"+ text3+ "</td>");

   out.println("<td width=5% align=left bgcolor=FF7D00><a href=OperBasic.jsp?delete=true&id="+ i +" onclick=\"{if(confirm("+"'are you sure?'"+")){return true;}return false;}\">Delete</a></td>");

   //out.println("<td width=5% align=left bgcolor=FF7D00><a href=OperBasic.jsp?delete=true&id="+ i + ">Delete</a></td>");

   out.println("</tr>");

             }

        }

        catch(Exception e)

        {

            e.printStackTrace();

        }



%>

</table>

<br/>

</body>

</html>
 
  

 
   
ceshi.xml  
<?xml version="1.0" encoding="GB2312"?>

<message>

  <message id="10005">

    <title>lrj</title>

    <content>  </content>

    <time>2011-05-08</time>

  </message>

</message>