铭瑶学习社区

首页 » 资源分享(分享快乐可以更快乐,那么分享资源就可以拥有更多资源...) » 源码分享 » js读取XML自动生成日记列表 源玛分享
ourhome - 2008-9-27 20:34:00
限于某些原因 我在铭瑶网没有开通数据库 但是又想把网页做成日记本
如果分成几个页面 在写日记的时候 同时更新首页连接的话 又会很麻烦
花了一周时间 利用JS+XML实现了 写日记 自动更新首页日记链接 另外附 写日记小助手(java)
源码出处 我们的家
在首页放置以下代码
<table>
<td width="309" height="179" align="center"><div class="content" id="demo3"
                  style="OVERFLOW: hidden; HEIGHT: 100px" >
                <div id="demo4">
                  <table height="100" cellspacing="0" cellpadding="0" width="203%" border="0">
                    <tbody>
                      <tr>
                        <td colspan="3" align="left" valign="top"><span class="text07" >
                          <script type="text/javascript">   
var cdsales=new ActiveXObject("Microsoft.XMLDOM"); //创建XmlDom对象
cdsales.async=false; //异步加载
cdsales.load("./html/xinqing1.xml");
cdsales.onreadystatechange= new function LoadedSales(){
    var txt="";
    if(cdsales.readyState==4){
    if(cdsales.parseError.errorCode != 0){
      txt="XML文件读取错误,请尝试刷新......";
    }
    else{
      var bi=cdsales.documentElement.selectNodes("jilu");
      if(bi!=null&&bi.length>0){
      for(var i=0;i<bi.length;i++){
        txt+="<a href=  "+"html/xinqing1.html#"+bi.childNodes[0].text+"><br>"+bi.childNodes[1].text+"</a>";
      }
      }
      else{
      txt="文件读取错误,请尝试刷新.........";
      }
    }
    }
    else{
    txt="Loading....";
    }
    document.write(txt);
}
      </script>
                        </span> </td>
                      </tr>
                    </tbody>
                  </table>
                </div>
              <div id="demo5"></div>
            </div>
            <script>
var tdemo=demo3.scrollTop
var stopscrolldemo=false  //添加一个控制变量,是否滚动
demo5.innerHTML=demo4.innerHTML+demo4.innerHTML
demo3.onmouseover=new Function("stopscrolldemo=true")//鼠标进设置true 不滚
demo3.onmouseout=new Function("stopscrolldemo=false")//鼠标出设置false滚
function qswhMarqueedemo(){
if (stopscrolldemo==true) {return;} //这里加这句就可以.如果=true 直接返回不滚
if(demo5.offsetTop-demo3.scrollTop<=0)
demo3.scrollTop-=demo4.offsetHeight
else
demo3.scrollTop++
}
setInterval(qswhMarqueedemo,200)
        </script>            </td>
</table>
读取html目录下xinqing1.xml文件 生成各条日记连接 字符为日记标题 并以从下往上的方式滚动显示
在根目录下创建html目录,存入xinqing.xml文件
格式如下
<?xml version="1.0" encoding="gb2312" ?>
    <data>
  <jilu>
<bb>a1(标签,用于定位,不可重复)</bb>

<date>标题+日期</date>

<neirong>内容 由于XML与HTML标签的原因 已经把换行从<br>更换成_br</neirong>

</jilu>
  <jilu> <bb>a2(标签,用于定位,不可重复)</bb>

<date>标题+日期</date>

<neirong>内容 由于XML与HTML标签的原因 已经把换行从<br>更换成_br</neirong>

</jilu>


</data>

添加新日记时 按此格式添加到</data>前即可:
  <jilu> <bb>a1(标签,用于定位,不可重复)</bb>

<date>标题+日期</date>

<neirong>内容 由于XML与HTML标签的原因 已经把换行从<br>更换成_br</neirong>

</jilu>

在html目录下防一个xingqing1.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" c />
<title>豆豆的心情全纪录</title>
<script language="javascript" type="text/javascript">
function tihuan(s)
{
  var r, re;
  re = /_br/g;
  r = s.replace(re, "<br>    ");
  return(r);
}
function MyColor(r,g,b){ 
this.red=r;
this.green=g;
this.blue=b;
}
MyColor.prototype.hexValue=function(){
var hR=this.red.toString(16);
var hG=this.green.toString(16);
var hB=this.blue.toString(16);
return "#"+(this.red<16?("0"+hR):hR)+(this.green<16?("0"+hG):hG)+(this.blue<16?("0"+hB):hB);
};
</script>
<style type="text/css">
<!--
body {
background-image: url(../pic/bg1.gif);
}
-->
</style></head>

<body>
<center><h1>豆豆的心情纪录</h1></center>
<br />
<br />
<script type="text/javascript">
var  re = /_br/i;
var Url="xinqing1.xml";
var cdsales=new ActiveXObject("Microsoft.XMLDOM"); //创建XmlDom对象
cdsales.async=false; //异步加载
cdsales.load(Url);
cdsales.onreadystatechange= new function LoadedSales(){
    var txt="";
    if(cdsales.readyState==4){
    if(cdsales.parseError.errorCode != 0){
      txt="XML文件读取错误,请尝试刷新......";
    }
    else{
      var bi=cdsales.documentElement.selectNodes("jilu");
      if(bi!=null&&bi.length>0){
      for(var i=0;i<bi.length;i++){
    x1= Math.ceil(Math.random()*255);
    x2=Math.ceil(Math.random()*255);
    x3=Math.ceil(Math.random()*255);
    var CnLeiColor=new MyColor(x1,x2,x3);
    var ss=CnLeiColor.hexValue();
        txt+="<a id=\""+bi.childNodes[0].text+"\"</a>"+"<font color="+ss+">"+"                           <font size=6>"+bi.childNodes[1].text+"</font><br><br>  "+bi.childNodes[2].text+"<br><br>        看了有感触?给我<a href =http://guestbook.new-youth.com/script/user/list.asp?userid=8300>留言</a>                        <font color=\"#000000\" size=2>颜色看不清?请</font><input type=button value=刷新 onclick=history.go(-0)> "+"</font><br><br><br><br><br><br><br><br><br>";
      }
      }
      else{
      txt="读取错误,请尝试刷新......";
      }
    }
    }
    else{
    txt="Loading....";
    }

    document.write(tihuan(txt));
}
</script>


</body>
</html>

这样,就OK了
但是 写日记的时候 得注意 一定要符合规则 否则可能导致解析XML失败
为了避免手工修改不可避免的出现一些错误
又写了一个日记更新辅助工具(java语言)
因字数限制 放在二楼


该源码出处 我们的家

ourhome - 2008-9-27 20:36:00
代码如下:注: 把路径改成你存放文件的路径
JDK1.6测试通过
其他版本没有测试
MainFrame.java

import javax.swing.JFrame;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;

import javax.swing.JPanel;
import javax.swing.ButtonGroup;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.JSplitPane;
import javax.swing.JButton;

public class MainFrame extends JFrame {
/**
  *
  */
ButtonGroup group=new ButtonGroup();
JRadioButton xiao=new JRadioButton("啸",false);
JRadioButton doudou=new JRadioButton("豆豆",true);

JButton save = new JButton("保存");
JTextArea lujing = new JTextArea("D:\\ourhome\\html\\xinqing1.xml");
JTextArea biaoti=new JTextArea("在此输入标题");
String[] ss = new String[] { "11", "22", "33" };
JSplitPane pan = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
JSplitPane pane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
JPanel pan1 = new JPanel();
String yuan="";
private static final long serialVersionUID = 1L;

public MainFrame() {
  xiao.setBounds( 300,5, 80, 20);
  doudou.setBounds(220,5, 80, 20);
  group.add(xiao);
  group.add(doudou);
  pan1.add(doudou);
  pan1.add(xiao);
  pane.setDividerLocation(0.12);
  pane.setDividerSize(4);
  pan.setDividerSize(1);
  pan1.setLayout(null);
  this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  this.setTitle("日记");
  this.setBounds(new Rectangle(100, 100, 500, 500));
 
  final JTextArea jt = new JTextArea(" ");
  biaoti.setVisible(true);
  biaoti.setBounds(5, 5, 200, 20);
  jt.setVisible(true);
  lujing.setBounds(250, 5, 160, 20);
  pan.add(save);
 
  pan.add(pan1);
  pane.add(pan);
  pane.add(jt);
  pan1.add(biaoti);
  add(pane);
  save.addMouseListener(new java.awt.event.MouseAdapter() {
  public void mouseReleased(MouseEvent e) {
    if (jt.getText().length()<10)
    {
    JOptionPane.showMessageDialog(null, "内容字数小于10,请不要敷衍了事" ,
      "提示", JOptionPane.WARNING_MESSAGE);
    }
    else if(biaoti.getText().length()<1)
    {
    JOptionPane.showMessageDialog(null, "标题字数太少,请不要敷衍了事" ,
      "提示", JOptionPane.WARNING_MESSAGE);
    }
    else{
    String input = "";
    if (doudou.isSelected())
    {
    input ="D:\\ourhome\\html\\xinqing1.xml";
    }
    else
    {
    input ="D:\\ourhome\\html\\xinqing.xml";
    }
   
    if (input.compareTo("") == 0 || input.compareTo(" ") == 0) {
    } else {
    String neirong = "";
    try {
      yuan=new Read().read(input);
    } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
   
    BufferedWriter fo = null;
    try {
      fo = new BufferedWriter(new FileWriter(
        new File(input)));

    } catch (java.io.FileNotFoundException f) {
    } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
    String biaoqian=yuan.substring(yuan.lastIndexOf("<bb>")+4, yuan.lastIndexOf("</bb>"));
    int i = Integer.parseInt(biaoqian.substring(1));
    int i2=i+1;
    String biaoqian1="a"+i2;
    Calendar system_date  = Calendar.getInstance();
    String ap;
    if(system_date.get(Calendar.HOUR_OF_DAY)<7)
    {
      ap="凌晨";
    }
    else if(system_date.get(Calendar.HOUR_OF_DAY)<12)
    {
      ap="上午";
    }
    else if(system_date.get(Calendar.HOUR_OF_DAY)<14)
    {
      ap="中午";
    }
    else if(system_date.get(Calendar.HOUR_OF_DAY)<19)
    {
      ap="下午";
    }
    else
    {
      ap="晚上";
    }
    String time="  "+system_date.get(Calendar.YEAR)+"-"+(system_date.get(Calendar.MONTH)+1)+"-"+system_date.get(Calendar.DAY_OF_MONTH)+ap;
    String biaoti1=biaoti.getText();
    String xinneir=jt.getText().replaceAll("
[url=file://n/]\\n[/url]", "_br");
    neirong = yuan+"<jilu>"+"\n<bb>"+biaoqian1+"</bb>"+"\n<date>"+biaoti1+time+"</date>" +"\n<neirong>"+xinneir+ "\n</neirong>\n</jilu>\n</data>";
   
    try {
      fo.write(neirong);
      fo.close();
      JOptionPane.showMessageDialog(null, "文件保存到:" + input,
        "提示", JOptionPane.WARNING_MESSAGE);
      jt.setText("");
    } catch (java.io.IOException i4) {
    }
    }
  }
  }
  public void mouseClicked(MouseEvent arg0) {
    // TODO Auto-generated method stub

  }
  public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub

  }
  public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub

  }
  public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub

  }
  });
}

public static void main(String srgs[]) {
  new MainFrame().setVisible(true);
}
}


Read.java

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Read {
public String read(String lujing) throws IOException {
  String s = "";
  String ss="";
  String lj=lujing;
  FileReader fr = new FileReader(lj);
  BufferedReader br = new BufferedReader(fr);
  while ((s = br.readLine()) != null) {
  ss+=s+"\n";
  }
  br.close();
  String sss=ss.substring(0, ss.length()-8);
  return sss;

}
}


这样 每日更新日记就不用手工更改源文件了
用辅助工具 写完 保存就OK了
注意:用工具保存后 可能会使XML文件用记事本打开乱码 但是不影响JS解析和使用
由于 这个辅助工具是我和我老婆两个人都要用的 所以 在判断文件位置的时候 用了一组单选按钮
不需要的 稍微改下就OK了
此源码出自 我们的家
sowworld - 2008-10-22 19:12:00
太厉害了,是不是原创的。
ourhome - 2008-11-4 11:58:00
每一个字母都是亲手敲出来的
1
查看完整版本: js读取XML自动生成日记列表 源玛分享