DOM解析

本文介绍了一种XML文件的解析方法,并通过JDOM库提供了三种不同的XML读写示例,包括直接读取XML元素值、遍历XML结构并修改节点内容,以及创建新的XML属性。

opera浏览器中文官方网站:http://download.pchome.net/internet/browser/browser/2645.html
wap网:http://www.wapzj.com

2006.3.21
解析xml

test.xml:
<?xml version="1.0" encoding="utf-8" ?>
<U-MAX>
 <PreSubscriptionNotify>
  <MDN>13312345678</MDN>
  <SPCode>12345</SPCode>
  <ProductCode>1234567890</ProductCode>
  <TransactionID>12345000A3E63B5E559E46F0ADA6E46B8DE2E1D2</TransactionID>
  <EffectiveDate>2003-07-07 10:00:00</EffectiveDate>
 </PreSubscriptionNotify>
</U-MAX>

test.xsl:

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="U-MAX">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="PreSubscriptionNotify" />
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="PreSubscriptionNotify">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="MDN" />
    <xs:element ref="SPCode" />
    <xs:element ref="ProductCode" />
    <xs:element ref="TransactionID" />
    <xs:element ref="EffectiveDate" />
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:simpleType name="ProductCodeType">
  <xs:restriction base="xs:string">
   <xs:length value="10" />
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="TransactionIDType">
  <xs:restriction base="xs:string">
   <xs:length value="40" />
  </xs:restriction>
 </xs:simpleType>
 <xs:element name="ProductCode" type="ProductCodeType"></xs:element>
 <xs:element name="TransactionID" type="TransactionIDType"></xs:element>
 <xs:simpleType name="MDNType">
  <xs:restriction base="xs:string">
   <xs:length value="11" />
   <xs:pattern value="13[0|1|3]/d{8}" />
  </xs:restriction>
 </xs:simpleType>
 <xs:element name="MDN" type="MDNType"></xs:element>
 <xs:simpleType name="SPCodeType">
  <xs:restriction base="xs:string">
   <xs:maxLength value="8" />
  </xs:restriction>
 </xs:simpleType>
 <xs:element name="SPCode" type="SPCodeType"></xs:element>
 <xs:simpleType name="EffectiveDateType">
  <xs:restriction base="xs:string">
   <xs:length value="19" />
   <xs:pattern value="/d{4}-((0?[1-9])|(1[0-2]))-((0?[1-9])|([1-2][0-9])|(3[0-1]))( +)((0?[0-9])|(1[0-9])|(2[0-3])):((0?[0-9])|([1-5][0-9])):((0?[0-9])|([1-5][0-9]))" />
  </xs:restriction>
 </xs:simpleType>
 <xs:element name="EffectiveDate" type="EffectiveDateType" />
</xs:schema>


方法一:
File f = new File("d://test.xml");
InputStream in = new FileInputStream(f);
String MDN=rot.getChild("U-MAX",org.jdom.Namespace.getNamespace(nsp1)).getChild("PreSubscriptionNotify",org.jdom.Namespace.getNamespace(nsp2)).getChild("MDN",org.jdom.Namespace.getNamespace(nsp2)).getText();
String SPCode=rot.getChild("U-MAX",org.jdom.Namespace.getNamespace(nsp1)).getChild("PreSubscriptionNotify",org.jdom.Namespace.getNamespace(nsp2)).getChild("SPCode",org.jdom.Namespace.getNamespace(nsp2)).getText();
String ProductCode=rot.getChild("U-MAX",org.jdom.Namespace.getNamespace(nsp1)).getChild("PreSubscriptionNotify",org.jdom.Namespace.getNamespace(nsp2)).getChild("ProductCode",org.jdom.Namespace.getNamespace(nsp2)).getText();
String TransactionID=rot.getChild("U-MAX",org.jdom.Namespace.getNamespace(nsp1)).getChild("PreSubscriptionNotify",org.jdom.Namespace.getNamespace(nsp2)).getChild("TransactionID",org.jdom.Namespace.getNamespace(nsp2)).getText();
String EffectiveDate=rot.getChild("U-MAX",org.jdom.Namespace.getNamespace(nsp1)).getChild("PreSubscriptionNotify",org.jdom.Namespace.getNamespace(nsp2)).getChild("EffectiveDate",org.jdom.Namespace.getNamespace(nsp2)).getText();


方法二:


<?xml version="1.0" encoding="gb2312"?>
<books>
  <book email="zhoujunhui">
    <name>rjzjh</name>
    <price>jjjjjj</price>
  </book>
</books>
 引用的类:
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
//下面是引用到JDOM中的类
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;


1 public class JDomParse {
2 public JDomParse(){
3  String xmlpath="bin/library.xml";
4  SAXBuilder builder=new SAXBuilder(false);
5  try {
6   Document doc=builder.build(xmlpath);
7   Element books=doc.getRootElement();
8   List booklist=books.getChildren("book");
9   for (Iterator iter = booklist.iterator(); iter.hasNext();) {
10    Element book = (Element) iter.next();
11    String email=book.getAttributeValue("email");
12    System.out.println(email);
13    String name=book.getChildTextTrim("name");
14    System.out.println(name);
15    book.getChild("name").setText("alterrjzjh");
16    
17   }
18   
19   XMLOutputter outputter=new XMLOutputter();
20   outputter.output(doc,new FileOutputStream(xmlpath));
21   
22  } catch (JDOMException e) {
23   e.printStackTrace();
24  } catch (IOException e) {
25   e.printStackTrace();
26  }
27 }
28 public static void main(String[] args) {
29  new JDomParse();
30 }
31}


方法三:

import org.jdom.*;
import org.jdom.output.*;
import org.jdom.input.*;
import java.io.*;
import java.util.List;

public class JDomeSample
{
public static void main(String[] args) throws Exception // 如果有任何异常则抛出
{
SAXBuilder sb = new SAXBuilder(); // 新建立构造器
Document doc = sb.build(new FileInputStream("1.xml")); // 读入1.xml
Element root = doc.getRootElement(); // 取得根节点, 就是例子中的<total>节点
List list = root.getChildren(); // 取得根节点下一层所有节点放入List类中
for(int i=0; i<list.size(); i++)
{
System.out.println("-------------------------");
Element item = (Element)list.get(i); // 取得节点实例
String name = item.getAttribute("name").getValue(); // 取得属性的值
System.out.println("NAME-->"+name);
Element sub = item.getChild("sub"); // 取得当前节点的指定子节点
String text = sub.getText(); // 取得指定子节点的内容
System.out.println("SUB-->"+text);
sub.setText("new item"+String.valueOf(i) ); // 改变子节点的内容
}
Element item = (Element)list.get(0); // 取得根节点下第一个子节点
Attribute a = new Attribute("started","true"); // 增加一个新的属性
item.addAttribute(a);
item.setAttribute("name","new item"); // 改变旧的属性值
String indent = ""; // 缩进符号
boolean newLines = false; // 是否产生新行
XMLOutputter outp = new XMLOutputter (indent,newLines,"gb2312"); // 构造新的输出流
outp.output(doc, new FileOutputStream("2.xml")); // 输出到2.XML文件中
}


潮汐研究作为海洋科学的关键分支,融合了物理海洋学、地理信息系统及水利工程等多领域知识。TMD2.05.zip是一套基于MATLAB环境开发的潮汐专用分析工具集,为科研人员与工程实践者提供系统化的潮汐建模与计算支持。该工具箱通过模块化设计实现了两大核心功能: 在交互界面设计方面,工具箱构建了图形化操作环境,有效降低了非专业用户的操作门槛。通过预设参数输入模块(涵盖地理坐标、时间序列、测站数据等),用户可自主配置模型运行条件。界面集成数据加载、参数调整、可视化呈现及流程控制等标准化组件,将复杂的数值运算过程转化为可交互的操作流程。 在潮汐预测模块中,工具箱整合了谐波分解法与潮流要素解析法等数学模型。这些算法能够解构潮汐观测数据,识别关键影响要素(包括K1、O1、M2等核心分潮),并生成不同时间尺度的潮汐预报。基于这些模型,研究者可精准推算特定海域的潮位变化周期与振幅特征,为海洋工程建设、港湾规划设计及海洋生态研究提供定量依据。 该工具集在实践中的应用方向包括: - **潮汐动力解析**:通过多站点观测数据比对,揭示区域主导潮汐成分的时空分布规律 - **数值模型构建**:基于历史观测序列建立潮汐动力学模型,实现潮汐现象的数字化重构与预测 - **工程影响量化**:在海岸开发项目中评估人工构筑物对自然潮汐节律的扰动效应 - **极端事件模拟**:建立风暴潮与天文潮耦合模型,提升海洋灾害预警的时空精度 工具箱以"TMD"为主程序包,内含完整的函数库与示例脚本。用户部署后可通过MATLAB平台调用相关模块,参照技术文档完成全流程操作。这套工具集将专业计算能力与人性化操作界面有机结合,形成了从数据输入到成果输出的完整研究链条,显著提升了潮汐研究的工程适用性与科研效率。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值