JDOM 操作XML

JDOM 操作XML
JDOM 操作XML

JDOM 操作XML

可扩展标记语言——e X tensible M arkup L anguage

用户可以自己定义语言标记,只要有开始和闭合标签即可。xsl装饰、修饰xml的显示结果。

dtd约束xml文件中的标记。

? XML的优点:

1、xml可以让数据和标记分离。

2、异质信息互通

3、机器语言

4、用交流语言替代html装饰语言

5、简单易用

6、可以自定义、可扩展

? XML和HTML比较

?JDOM操作XML

JDOM可以很方便的操作XML文档,完成XML内容的创建、修改,已经遍历Document文档中的XML元素,完成查询等。下面我们就用JDOM完成这些功能。

# 准备

首先我们要准备jdom相关的jar包

jdom-jar下载地址:https://www.360docs.net/doc/dc5360141.html,/dist/binary/

jaxen在jdom的zip压缩包中可以找到。

Junit是测试用的,可以不添加。但需要用main方法测试。

Junit-jar https://www.360docs.net/doc/dc5360141.html,/repository/app/bundle/version/download?na me=https://www.360docs.net/doc/dc5360141.html,.junit&version=4.8.1&type=binary

其次,是准备测试工作。部分测试代码:

package com.hoo.test;

import java.io.File;

import java.io.IOException;

import java.util.List;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import org.jdom.Attribute;

import https://www.360docs.net/doc/dc5360141.html,ment;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.JDOMException;

import https://www.360docs.net/doc/dc5360141.html,space;

import org.jdom.Text;

import org.jdom.input.SAXBuilder;

import org.jdom.output.XMLOutputter;

import org.jdom.xpath.XPath;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

/**

* function: JDOM操作XML

* @author hoojo

* @createDate 2011-8-4 下午12:34:09

* @file DocumentTest.java

* @package com.hoo.test

* @project JDOMTest

* @blog https://www.360docs.net/doc/dc5360141.html,/IBM_hoojo

* @email hoojo_@https://www.360docs.net/doc/dc5360141.html,

* @version 1.0

*/

public class DocumentTest {

private XMLOutputter out = null;

@Before

public void init() {

//输出文件信息

out = new XMLOutputter();

}

@After

public void destory() {

if (out != null) {

out = null;

}

System.gc();

}

/**

* function:输出Document文档信息

* @author hoojo

* @createDate 2011-8-5 下午12:10:27

* @param doc

*/

private void print(Document doc) {

//设置XML文件编码格式

//out.setFormat(Format.getCompactFormat().setEncoding("gb2132")); System.out.println(out.outputString(doc));

}

private void fail(Object o) {

if (o != null) {

System.out.println(o);

}

}

}

# 创建Document

/**

* 创建xml元素

*/

@Test

public void createDoc() {

Document doc = null;

//method 1、创建一个Doc文档,添加一个元素root

doc = new Document(new Element("root"));

print(doc);

//method 2、创建一个Doc文档,添加一个元素root,设置root元素的节点文本

doc = new Document(new Element("root").setText("this is a root el")); print(doc);

//method 3、创建一个Doc文档,添加一个元素root,设置root元素的节点文本且添加一个属性id,值为110

Element root = new Element("root");

root.setText("this is a root el");

root.setAttribute("id", "110");

doc.setRootElement(root);

fail("method 3: \n" + out.outputString(doc));

//method 4、创建一个Doc文档,添加一个元素root,设置root元素的节点文本

doc = new Document();

doc.addContent(new Element("root").setText("this is a root el")); fail("method 4: \n" + out.outputString(doc));

fail(doc.toString());

}

* new Document可以创建一个doc文档

当给Document传递一个Element参数时,这个Element就是根元素;

当调用Document的setRootElement方法时,可以设置当前Doc的根元素;

当调用doc的addContent的时候,添加的元素将会是根元素;

doc = new Document(new Element("root").setText("this is a root el")); 上面就创建了一个doc,根元素是root,root节点的内容是this is a root el;

注意setText方法返回的对象是当前Element,类似是StringBuffer的append方法;

* new Element()可以创建一个元素

如果传递参数那么这个参数将会是元素节点的名称;

Element的setText方法可以设置元素的文本值;

Element root = new Element("root");

root.setText("this is a root el");

创建一个节点名称为root的元素,文本是this is a root el

* setAttribute()可以设置某个具体节点的属性值

root.setAttribute("id", "110");

给root节点添加一个id,值为110

* addContent添加注释

root .addContent(new Comment("注释"));

在root元素下添加一个注释;

addContent是向元素中添加内容,而setContent是设置内容;

* setText设置元素文本内容

root.setText("this is a root el");

同样

root. setContent(new Text("this is text"))

同样

root.addContent("this is text");

下面用上面的这些方法,创建一篇XML文档。文档内容如下:

/**

创建一遍xml文档

Toyota

Celica

1997

green

1ABC234

*/

@Test

public void createXMLDoc() {

//创建一个car的元素

Element carEl = new Element("car");

//创建vin属性,并设置值

carEl.setAttribute("vin", "123fhg5869705iop90");

//创建注释

carEl.addContent(new Comment("Description of a car"));

//创建一个make元素,设置文本内容

carEl.addContent(new Element("make").setText("Toyota"));

//创建一个model元素,添加一个文本元素

carEl.addContent(new Element("model").setContent(new

Text("Celica")));

//创建一个year元素,添加文本内容

carEl.addContent(new Element("year").addContent("1997"));

//创建一个color元素,文本内容是green

carEl.addContent(new Element("color").setText("green"));

//创建一个license的元素

Element licenseEl = new Element("license");

//为license元素添加文本内容

licenseEl.addContent("1ABC234");

//创建一个state的属性,值为CA

licenseEl.setAttribute("state", "CA");

//将licenseEl添加到根元素中

carEl.addContent(licenseEl);

//将car元素设置为根元素

Document doc = new Document(carEl);

print(doc);

/*out = new XMLOutputter();

try {

out.output(doc, System.out);

} catch (IOException e) {

e.printStackTrace();

}*/

}

方法运行后,所创建的文档和上面注释文档内容相同

# 读取XML文件的内容

disk.xml文件内容如下:

8G

200

1580

10G

500

3000

11G

50

Java book

Spring.txt

strtus.doc

500

读取disk文件的内容,代码如下:

/**

* function:读取xml文件中的元素

* @author hoojo

* @createDate 2011-8-4 下午04:54:17

*/

@Test

@SuppressWarnings("unchecked")

public void readXMLContent() {

SAXBuilder builder = new SAXBuilder();

Document doc = builder.build(new File("file/disk.xml"));

Element rootEl = doc.getRootElement();

//获得所有子元素

List list = rootEl.getChildren();

//List list = rootEl.getChildren("disk");

for (Element el : list) {

//获取name属性值

String name = el.getAttributeValue("name");

//获取子元素capacity文本值

String capacity = el.getChildText("capacity");

//获取子元素directories文本值

String directories = el.getChildText("directories");

String files = el.getChildText("files");

System.out.println("磁盘信息:");

System.out.println("分区盘符:" + name);

System.out.println("分区容量:" + capacity);

System.out.println("目录数:" + directories);

System.out.println("文件数:" + files);

System.out.println("-----------------------------------"); }

} catch (JDOMException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

* getChildren方法可以获取所有子元素

* getChildren(elName)可以获取所有名称为elName的子节点

* getAttributeValue可以获取指定属性的值

* getChildText可以获取子节点的文本值

# 递归显示文档信息

/**

* 递归返回指定格式的“--”

*/

private String format(int i) {

String temp = "";

if (i > 0) {

temp += "--";

temp += format(i);

}

return temp;

}

/**

* function:显示当前节点所有Element的属性信息

* @author hoojo

* @createDate 2011-8-4 下午06:10:53

* @param el

* @return

*/

@SuppressWarnings("unchecked")

private String getAttrInfo(Element el) {

List attrs = el.getAttributes();

return getAttrInfo(attrs);

}

/**

* function:显示属性信息

* @author hoojo

* @createDate 2011-8-9 下午03:52:59

* @param attrs

* @return

*/

private String getAttrInfo(List attrs) {

StringBuilder info = new StringBuilder();

for (Attribute attr : attrs) {

info.append(attr.getName()).append("=").append(attr.getValue()).appen d(", ");

}

if (info.length() > 0) {

return"[" + info.substring(0, info.length() - 2)+ "]";

}

return"";

}

/**

* function:递归显示文档节点元素信息

* @author hoojo

* @createDate 2011-8-4 下午05:56:34

* @param i

* @param list

*/

@SuppressWarnings("unchecked")

private void print(int i, List list) {

i++;

for (Element el : list) {

List childs = el.getChildren();

if (childs.size() > 0) {

fail(format(i) + el.getName() + " " + getAttrInfo(el));

print(i, childs);

} else {

fail(format(i) + el.getName() + ":" + el.getText() + " " + getAttrInfo(el));

}

}

}

调用print(0, root.getChildren());方法就可以看到一篇格式化后输出的文档内容

#############显示文档信息###############

--HD

----disk [name=C]

------capacity:8G

------directories:200

------files:1580

----disk [name=D]

------capacity:10G

------directories:500

------files:3000

----disk2 [name=E]

------capacity:11G

------directories:50

------files [size=200, modifyDate=2011-08-3]

--------file:Java book

--------file:Spring.txt

--------file:strtus.doc

----files:500 [size=220]

# XPath查询遍历XML文档

/**

* function:用xpath遍历xml信息

* @author hoojo

* @createDate 2011-8-4 下午04:56:52

* xpath参考:https://www.360docs.net/doc/dc5360141.html,/xpath/xpath_functions.asp

*

* nodeName 选取此节点的所有子节点

/ 从根节点选取

// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的

. 选取当前节点

.. 选取当前节点的父节点

@ 选取属性

* 匹配任何元素节点

@* 匹配任何属性节点

node() 配任何类型的节点

ancestor 选取当前节点的所有先辈(父、祖父等)

ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身

attribute 选取当前节点的所有属性

child 选取当前节点的所有子元素。

descendant 选取当前节点的所有后代元素(子、孙等)。

descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。 following 选取文档中当前节点的结束标签之后的所有节点。

namespace 选取当前节点的所有命名空间节点

parent 选取当前节点的父节点。

preceding 选取文档中当前节点的开始标签之前的所有节点。

preceding-sibling 选取当前节点之前的所有同级节点。

self 选取当前节点。

child::book 选取所有属于当前节点的子元素的 book 节点

attribute::languane 选取当前节点的 languange 属性

child::* 选取当前节点的所有子元素

attribute::* 选取当前节点的所有属性

child::text() 选取当前节点的所有文本子节点

child::node() 选取当前节点的所有子节点

descendant::book 选取当前节点的所有 book 后代

ancestor::book 选择当前节点的所有 book 先辈

*/

@SuppressWarnings("unchecked")

@Test

public void queryElementByXPath() {

SAXBuilder builder = new SAXBuilder();

try {

Document doc = builder.build(new File("file/disk.xml"));

List list = XPath.selectNodes(doc, "/HD/disk");

for (Element el : list) {

String name = el.getAttributeValue("name");

String capacity = el.getChildText("capacity");

String directories = el.getChildText("directories");

String files = el.getChildText("files");

System.out.println("磁盘信息:");

System.out.println("分区盘符:" + name);

System.out.println("分区容量:" + capacity);

System.out.println("目录数:" + directories);

System.out.print("文件数:" + files);

String capacityText = ((Text) XPath.selectSingleNode(el, "//disk[@name='" + name + "']/capacity/text()")).getTextNormalize(); System.out.println("#" + capacityText);

System.out.println("-----------------------------------"); }

//显示文档信息

System.out.println("#############显示文档信息###############"); print(0, doc.getContent());

//获得hd元素

System.out.println("#############显示HD子元素信息

###############");

Element root = (Element) XPath.selectSingleNode(doc, "/HD");

//fail(root.getChildren().size());

print(0, root.getChildren());

//获取hd下所有元素

System.out.println("#############显示HD子元素信息

###############");

List roots = (List) XPath.selectNodes(doc, "/HD/*");

//fail(roots.size());

print(0, roots);

//获得hd下的所有disk元素

System.out.println("#############显示disk信息###############"); roots = (List) XPath.selectNodes(doc, "/HD/disk");

//fail(roots.size());

print(0, roots);

System.out.println("#############显示disk2信息

###############");

roots = (List) XPath.selectNodes(doc, "/HD/disk2");

print(0, roots);

System.out.println("#############显示任意路径下的files信息

###############");

roots = (List) XPath.selectNodes(doc, "//files");

print(0, roots);

System.out.println("#############显示任意路径下的files指定下标的

file信息###############");

roots = (List) XPath.selectNodes(doc, "//files/file[1]");

print(0, roots);

System.out.println("#############显示任意路径下的files最后的file

信息###############");

roots = (List) XPath.selectNodes(doc, "//files/file[last()]"); print(0, roots);

System.out.println("#############显示任意路径下的files倒数第二的

file信息###############");

roots = (List) XPath.selectNodes(doc, "//files/file[last() - 1]"); print(0, roots);

System.out.println("#############显示任意路径下的files的子元素

file位置position在第二的file信息###############");

roots = (List) XPath.selectNodes(doc, "//files/file[position() = 2]");

//roots = (List) XPath.selectNodes(doc, "//files/file[position() > 2]");

print(0, roots);

System.out.println("#############显示任意路径下的files第三个file

的当前节点的前面所有同级节点信息###############");

roots = (List) XPath.selectNodes(doc,

"//files/file[3]/preceding-sibling::*");

print(0, roots);

System.out.println("#############显示任意路径下的disk2之前的所有节

点信息###############");

roots = (List) XPath.selectNodes(doc, "//disk2/preceding::*"); print(0, roots);

System.out.println("#############显示任意路径下的disk2之后的所有节

点信息###############");

roots = (List) XPath.selectNodes(doc, "//disk2/following::*"); print(0, roots);

System.out.println("#############显示任意路径下的files的所有属性信息###############");

roots = (List) XPath.selectNodes(doc, "//files/attribute::*"); fail(getAttrInfo(roots));

System.out.println("#############显示任意路径下的节点是disk属性name=C的信息###############");

roots = (List) XPath.selectNodes(doc, "//disk[@name='C']");

print(0, roots);

System.out.println("#############显示任意路径下的节点是disk的子元素的文本中含义5和8节点的信息###############");

roots = (List) XPath.selectNodes(doc,

"//disk/child::*[contains(text(), '8') and contains(text(), '5')]");

//roots = (List) XPath.selectNodes(doc,

"//disk/child::*[contains(text(), '8') or contains(text(), '5')]");

print(0, roots);

System.out.println("#############显示任意路径下的节点是files且有属性size的信息###############");

roots = (List) XPath.selectNodes(doc, "//files[@size]");

print(0, roots);

System.out.println("#############显示HD节点下capacity的值为11G

的信息###############");

//roots = (List) XPath.selectNodes(doc,

"/HD/disk/capacity[text()='11G']");

roots = (List) XPath.selectNodes(doc,

"/HD/*/capacity[text()='11G']");

//roots = (List) XPath.selectNodes(doc,

"/*/*/capacity[text()='11G']");

print(0, roots);

//parent::*表示父节点集合

System.out.println("#############显示任意路径下的节点是files且属性size有值的父节点的信息###############");

roots = (List) XPath.selectNodes(doc,

"//files[@size='200']/parent::*");

print(0, roots);

System.out.println("#############显示任意路径下的节点disk的子节点的capacity信息###############");

roots = (List) XPath.selectNodes(doc, "//disk/child::capacity"); print(0, roots);

//获取c盘的大小

System.out.println("获取c盘的大小");

Text filesText = (Text) XPath.selectSingleNode(doc,

"/HD/disk[@name='C']/files/text()");

System.out.println(filesText.getTextNormalize());

//XPath function

/**

string concat (string, string, string*) 联接两个字符串

boolean starts-with (string, string) 判断某字符串是否以另一字符串开头

boolean contains (string, string) 判断某字符串是否包含另一字符串

string substring (string, number, number) 取子字符串

number string-length (string) 测字符串长度

number sum (node-set) 求和

number floor (number) 求小于此数的最大整数值

number ceiling (number) 求大于此数最小整数值

**/

System.out.println("获取@size的和大于200的");

roots = (List) XPath.selectNodes(doc, "//files[sum(@size) > 200]");

print(0, roots);

System.out.println("查找directories的内容长度小于3的");

roots = (List) XPath.selectNodes(doc,

"//directories[string-length(text()) < 3]");

print(0, roots);

System.out.println("查找files的内容包含5的");

roots = (List) XPath.selectNodes(doc, "//files[contains(text(), '5')]");

print(0, roots);

} catch (JDOMException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

# 删除元素及其他操作

/**

* function:打印doc相关信息

* @author hoojo

* @createDate 2011-8-10 下午06:29:01

*/

@SuppressWarnings("unchecked")

@Test

public void printInfo() {

SAXBuilder builder = new SAXBuilder();

try {

//builder.setFeature("user", true);

//builder.setIgnoringBoundaryWhitespace(true);

//忽略元素内容的空格

//builder.setIgnoringElementContentWhitespace(true);

Document doc = builder.build(new File("file/web.xml"));

fail("baseURI: " + doc.getBaseURI());

fail("ContentSize: " + doc.getContentSize());

//System.out.println("getContent: ");

//print(0, doc.getContent());

fail("getContent index: "+ doc.getRootElement().getContent(1)); fail("getDocType: " + doc.getDocType());

fail("getParent: " +

doc.getRootElement().getContent(1).getParent());

fail("getProperty: " + doc.getProperty("filter"));

print(0, XPath.selectNodes(doc, "//*[contains(text(), '#')]")); fail("getText: " + ((Element)XPath.selectNodes(doc,

"//*[contains(text(), '#')]").get(0)).getText());

fail("getTextTrim: " + ((Element)XPath.selectNodes(doc,

"//*[contains(text(), '#')]").get(0)).getTextTrim());

fail("getTextNormalize: " + ((Element)XPath.selectNodes(doc, "//*[contains(text(), '#')]").get(0)).getTextNormalize());

fail("hasRootElement: " + doc.hasRootElement());

//如果文档带有Namespace一定要设置Namespace,不然无法读取内容

Namespace ns =

Namespace.getNamespace("https://www.360docs.net/doc/dc5360141.html,/xml/ns/javaee");

Element servletEl = doc.getRootElement().getChild("servlet", ns);

fail("servletEl: " + servletEl);

print(0, servletEl.getChildren());

fail("getChildText: " + servletEl.getChildText("servlet-class", ns));

fail("getChildTextNormalize: " +

servletEl.getChildTextNormalize("servlet-name", ns));

fail("getChildTextTrim: " +

servletEl.getChildTextTrim("servlet-class", ns));

fail("getName: " + servletEl.getName());

fail("getNamespacePrefix: " + servletEl.getNamespacePrefix()); fail("getNamespace: " + servletEl.getNamespace());

fail("getQualifiedName: " + servletEl.getQualifiedName());

Element classEl = servletEl.getChild("servlet-class", ns);

fail("getText: " + classEl.getText());

fail("getTextNormalize: " + classEl.getTextNormalize());

fail("getTextTrim: " + classEl.getTextTrim());

fail("getValue: " + classEl.getValue());

//删除节点

fail(doc.getRootElement().removeContent(3));

//print(0, doc.removeContent());

//print(0, doc.getRootElement().getChildren());

fail(servletEl.removeChild("servlet-class", ns));

fail(servletEl.removeChildren("init-param", ns));

print(0, servletEl.getChildren());

} catch (JDOMException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

作者:hoojo

出处:https://www.360docs.net/doc/dc5360141.html,/hoojo/archive/2011/08/11/2134638.html

blog:https://www.360docs.net/doc/dc5360141.html,/IBM_hoojo

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权所有,转载请注明出处本文出自:https://www.360docs.net/doc/dc5360141.html,/hoojo/archive/2011/08/11/2134638.html

XML介绍

也是一个元素,元素除了包含元素还可以包含文本信息。元素也可以含有属性,比如property就具有name属性。 XML 元素可以在开始标签中包含属性,属性 (Attribute) 提供关于元素的额外(附加)信息。属性通常提供不属于数据组成部分的信息,但是对需要处理这个元素的应用程序来说却很重要。 XML 属性必须加引号,属性值必须被引号包围,不过单引号和双引号均可使用。 如果属性值本身包含双引号,那么有必要使用单引号包围它,或者可以使用实体引用。 1.2.3. 大小写敏感 XML对大小写是敏感的,这一点不象HTML。在XML中,标记< Letter> 和标记 是不一样的。 因此,打开和结束标记的大小写应该写成相同的: 1.2.4. 元素必须有关闭标签 XML要求每个元素必须由起始标签和关闭标签组成。关闭标签与起始标签的名字相同,写法上多一个“/” 例如: 只有起始标记是不行的。 必须要有关闭标签 1.2.5. 必须有根元素 XML要求必须有根元素,所谓根元素就是不被其它元素包围(不含有父元素)。并且根元素只能有一个。 01. 02. …03. 01. 02. 01. 根元素 02.

03. j d b c :t h i n @192.168.0.26:1521:t a r e n a 04.

05.

o p e n l a b

06.

o p e n 123

XML报表操作流程详解

XML报表操作流程详细讲解 ——2014-8-10 XML报表有两种方法可以实现:REPORT和PL/SQL,这里介绍PL/SQL的做法,REPORT可以参考PPT教程。 第一步:写好PL/SQL程序 第二步:在浏览器(如IE)上输入网址打开ERP系统,输入用户名和密码登陆。如图1 图 1 第三步:登陆进去之后,在左边导航栏目下找到-应用开发员并展开,如图2,再找到并发,同样展开它,你会发现里面有程序、可执行、程序库三个标签,如图3。 图 2

图3 第四步:双击可执行,此时会弹出一个oracle application 的窗体,如图所示。如果没有弹出,可能需要安装一些东西,如果安装了还没有弹出则可能是浏览器兼容性问题,需要设置浏览器的安全性。弹出之后,如图4所示 图 4 接下来就可以进行可执行并发程序的定义: 可执行——填写的是自己定义的可执行名称,通常开发过程中会按项目 组的命名规范来填写,例如由有实际意义的简短英语单词构 成。 简称——通常简称和可执行填写的是一样的,目的是为了便于后期维护和记忆,以免太多的名称造成混淆。 应用产品——就是要应用此XML报表的产品 说明——说明性文字,只是为了便于读者理解,可不填 执行方法——执行方法有很多种,如图5,具体看你是采用哪一种,这里选择PL/SQL存储过程,默认情况下是oracle reports 执行文件名——由两部分组成,前面是包名,后面是过程名,中间用点号.隔开,如图6

子例程名、执行文件路径不用填,很少用,具体我也没用过。 注意:如果可执行已经被定义过,按F11键可进入查询模式,输入完查询字符后,接着按Ctrl + F11组合键则是执行查询。这个是ERP系统的通用快捷键,经常被用到。 最后填完之后点击保存按钮,如图8。 图 5 图6

如何用vc创建和读取xml文件

如何用vc创建和读取xml文件 当前Web上流行的剧本语言是以HTML为主的语言结构,HTML是一种标记语言,而不是一种编程语言,主要的标记是针对显示,而不是针对文档内容本身结构的描述的。也就是说,机器本身是不能够解析它的内容的,所以就出现了XML语言。XML (eXtensible Markup Language)语言是SGML语言的子集,它保留了SGML主要的使用功能,同时大大缩减了SGML的复杂性。XML语言系统建立的目的就是使它不仅能够表示文档的内容,而且可以表示文档的结构,这样在同时能够被人类理解的同时,也能够被机器所理解。XML要求遵循一定的严格的标准。XML分析程序比HTML浏览器更加要挑剔语法和结构,XML要求正在创建的网页正确的使用语法和结构,而不是象HTML一样,通过浏览器推测文档中应该是什么东西来实现HTML的显示,XML使得分析程序不论在性能还是稳定性方面都更容易实现。XML文档每次的分析结果都是一致的,不象HTML,不同的浏览器可能对同一个HTML作出不同的分析和显示。 同时因为分析程序不需要花时间重建不完整的文档,所以它们能比同类HTML能更有效地执行其任务。它们能全力以赴地根据已经包含在文档中的那个树结构建造出相应的树来,而不用在信息流中的混合结构的基础上进行显示。XML标准是对数据的处理应用,而不是只针对Web网页的。任何类型的应用都可以在分析程序的上面进行建造,浏览器只是XML的一个小的组成部分。当然,浏览仍旧极其重要,因为它为XML工作人员提供用于阅读信息的友好工具。但对更大的项目来说它就不过是一个显示窗口。因为XML具有严格的语法结构,所以我们甚至可以用XML来定义一个应用层的通讯协议,比如互联网开放贸易协议(Internet Open Trading Protocol)就是用XML来定义的。从某种意义上说,以前我们用BNF范式定义的一些协议和格式从原则上说都可以用XML来定义。实际上,如果我们有足够的耐心,我们完全可以用XML来定义一个C++语言的规范。 当然,XML允许大量HTML样式的形式自由的开发,但是它对规则的要求更加严格。XML主要有三个要素:DTD(Document Type Declaration——文档类型声明)或XML Schema(XML大纲)、XSL(eXtensible Stylesheet Language——可扩展样式语言)和XLink(eXtensible Link Language——可扩展链接语言)。DTD和XML大纲规定了XML文件的逻辑结构,定义了XML文件中的元素、元素的属性以及元素和元素的属性之间的关系;Namespace(名域)实现统一的XML文档数据表示以及数据的相互集成;XSL是用于规定XML文档呈现样式的语言,它使得数据与其表现形式相互独立,比如XSL能使Web浏览器改变文档的表示法,例如数据的显示顺序的变化,不需要再与服务器进行通讯。通过改变样式表,同一个文档可以显示得更大,或者经过折叠只显示外面得一层,或者可以变为打印得格式。而XLink将进一步扩展目前Web上已有的简单链接。 二、实现XML解析的说明 当然,从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但是实际上微软已经给我们提供了一个XML语法解析器,如果你安装了IE5.0以上版本的话,实际上你就已经安装了XML语法解析器。可以从微软站点(https://www.360docs.net/doc/dc5360141.html,)下载最新的MSXML的SDK和Parser文件。它是一个叫做MSXML.DLL的动态链接库,最新版本为msxml3,实际上它是一个COM对象库,里面封装了所有进行XML解析所需要的所有必要的对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象。所以你可以用任何语言(比如VB,VC,DELPHI,C++ Builder甚至是剧本语言等等)对它进行调用,

JSON 数据格式

JSON 数据格式 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。 基础结构 JSON建构于两种结构: 1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associative array)。 2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。 基础示例 简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是JavaScript 很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。 表示名称 / 值对 按照最简单的形式,可以用下面这样的 JSON 表示 "名称 / 值对" :{ "firstName": "Brett" } 这个示例非常基本,而且实际上比等效的纯文本 "名称 / 值对" 占用更多的空间:firstName=Brett 但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的记录,比如: { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }

XML与SQL数据库

龙源期刊网 https://www.360docs.net/doc/dc5360141.html, XML与SQL数据库 作者:刘立平 来源:《数字技术与应用》2015年第07期 摘要:XML的核心是描述数据的组织结构,它可以作为数据交换的标准格式。SQL数据库在数据查询、修改、保存、安全等方面具有其他数据处理手段无法替代的地位。一个系统获得一个XML文件后,可能需要将XML中的某些标记包含的文本内容转化为数据库中表的一条记录;另一方面,一个应用系统可能需要将数据库表中的某些记录转化为一个XML文件,以便与其他系统交互数据,发挥XML文件在数据交换上的优势。 关键词:XML SQL数据库数据交换 中图分类号:TP311.13 文献标识码:A 文章编号:1007-9416(2015)07-0000-00 1 XML XML(eXtensible Markup Language)是可扩展标记语言,XML是由万维网联盟定义的一种语言,是表示结构化数据的行业标准。它使得Internet上的数据相互交流更加方便,让文件的内容更加显而易懂。XML不仅提供了直接在数据上工作的通用方法,还可以将用户界面和结构化数据相分离,允许不同来源的数据的无缝集成和对同一数据的多种处理。XML包括一系列相关技术,其中主要内容有:规范的XML、有效的XML文件、XML与CSS、XML与XSL、基于DOM的解析器、XML Schema模式、XML与数据库等等知识。 2数据库 数据库(DataBase,简称DB)是存放数据的仓库,是为了满足某一部门中多个用户的多种应用的需要,安装一定的数据模型在计算机中组织、存储和使用的相互联系的数据集合。数据库系统就是管理大量的、持久的、可靠的和共享的数据的工具。 数据库管理系统软件的种类有很多,但常用的也就那么三五种:ORACLE、My SQL、ACCESS、MS SQL Server这些是不同领域常用的数据库管理系统软件。其中ORACLE和MS SQL Server最为常见,这里以MS SQL Server为例, SQL server数据库是美国微软公司发布的一款RMDBS数据库,也就是关系型数据库系统。SQL server的优点为: (1)真正的客户服务器体系结构。 (2)图形化用户界面,更加直观、简单。 (3)丰富的编程接口工具,为用户进行程序设计提供更多选择余地。

SQL操作XML

T-Sql操作Xml数据 一、前言 SQL Server 2005 引入了一种称为XML 的本机数据类型。用户可以创建这样的表,它在关系列之外还有一个或多个XML 类型的列;此外,还允许带有变量和参数。为了更好地支持XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象(BLOB)。用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中。 随着SQL Server 对XML字段的支持,相应的,T-SQL语句也提供了大量对XML操作的功能来配合SQL Server中XML字段的使用。本文主要说明如何使用SQL语句对XML进行操作。 二、定义XML字段 在进行数据库的设计中,我们可以在表设计器中,很方便的将一个字段定义为XML类型。需要注意的是,XML字段不能用来作为主键或者索引键。同样,我们也可以使用SQL语句来创建使用XML字段的数据表,下面的语句创建一个名为“docs”的表,该表带有整型主键“pk”和非类型化的XML 列“xCol”: CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not null) XML类型除了在表中使用,还可以在存储过程、事务、函数等中出现。下面我们来完成我们对XML操作的第一步,使用SQL语句定义一个XML类型的数据,并为它赋值: declare @xmlDoc xml; set @xmlDoc=' C Program David 21 ' 三、查询操作 在定义了一个XML类型的数据之后,我们最常用的就是查询操作,下面我们来介绍如何使用SQL 语句来进行查询操作的。

PBDOM操作XML文档轻松入门_PowerBuilder

PBDOM操作XML文档轻松入门 2008-03-06 15:13 本文对PBDOM技术进行相关介绍,但并不涉及XML的基础知识,建议阅读者对下述相关术语有一定了解: Document(文档), DTD(文档类型定义), schema (大纲),Element(元素), attribute(属性), processing instruction (处理命令), entity(实体)。 本文主要包括以下内容: 1、为什么要使用PBDOM以及怎样创建PBDOM 2、PBDOM主要用于那些地方 3、如何使用PBDOM编程 4、PBDOM和其他XML解析(parser)技术的比较 一、什么是DOM ◆文档对象模型(Document Object Model) 1、作为一项W3C规范,XML DOM存在目的是为不同类型的应用程序提供一个标准的编程接口,它被设计可以跨平台、跨语言使用。 2、我们可以利用XML DOM创建XML文档并操纵其结构,增加、修改、删除元素。 3、程序中调用XML解析器载入XML文档到内存中。当文档被载入后,可以通过进入DOM检索和操作相关信息。 4、DOM 保存了XML文档树,文档(document)元素位于整棵树的最顶层。该元素可以有一到多个子节点来保存树的结构。 可以参阅以下网站: https://www.360docs.net/doc/dc5360141.html,/dom/ 来了解更多的关于XML Document Object Model的内容。 二、什么时候应该使用DOM工具 ◆当你需要做下列事情的时候,你应该想到XML DOM的 1、在一个或者多个XML文档之间移动元素 2、创建新的元素并且在XML文档的任意位置插入 3、操作元素并重新插入其到XML文档其他位置 4、导入内嵌数据结构 & . pb9中,数据窗口现在可以通过XML导出内嵌数据结构(nested data structures). 三、什么是PBDOM ◆PowerBuilder 文档结构模型(PowerBuilder Document Object Model)

XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较[收藏]

1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 2)SAX SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。DOM 采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。 DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然

后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。 3)JDOM https://www.360docs.net/doc/dc5360141.html,/ JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。 JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

XML与关系数据库

XML与关系数据库 前面我们讲到了XML的数据存取机制,从一个较高的层面上分析了数据存取的多种方式。作为其中的一种,数据库的数据存取机制似乎倍受青睐,但我们并未对此作比较深入的探讨,这一节里我们对XML与数据库的关系进行更进一步的详细分析。 我们知道,关系数据库提供了对于大批量数据的有效存储管理和快速信息检索、查询的功能。从体系结构上看,数据库技术的发展历经了网络型数据库、层次型数据库、关系数据库、面向对象数据库。虽然面向对象数据库融入了面向对象技术,但是到目前为止,在各个领域使用最广的还是关系数据库。关系数据库管理系统(RDBMS)采用二维表格作为存储数据的模型,如下图10-1所示, 字段字段字段 行 行 行 行 图10-1 关系数据库二维表 表格由行和列组成,一般情况下,列被称作“字段”,用于表示组成数据有效信息的属性,而行则用于指示一条完整的数据记录。由于数据间的相关性可以通过表与表之间关键字(外键)来关联,由此产生了“关系”类型数据库的由来。 关系数据库有自己的查询语言——结构化查询语言(Structured Query Languag e,SQL)。SQL最初由IBM提出,后经不断发展,已于1986年成为业界标准并被广泛采用。SQL 是非过程性的。当SQL语句传送到数据库服务器后,服务器返回满足条件的结果或结果集(视具体查询项目而定)。一般情况下,大多数支持SQL 的服务器系统均采用客户/服务器架构,现在又发展到更为先进的分布式处理架构。这样一来,SQL服务器既可以接收客户应用程序发送的查询请求,也可以接收其他服务器的查询请求,这些服务器可能是其他SQL服务器,也可以是XML服务器。 就数据存储而言,关系型数据库已经是相当成熟的应用,从80年代商用产品出现至今,早已深入企业储存及数据应用的核心。相较之下,XML部分技术尚且在发展阶段。关系型数据库是透过详细定义和控制结构化数据的方式,达到数据增、删、查询的目的。因此它是以字段数据型态的精确定义,将数据以列的方式一笔笔储存,再透过数据表之间的互相关联,建构出数据和数据结合后的复杂结果,因此

XML文件基本操作

XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized Markup Language,标准通用标记语言)。它没有标签集(tag set),也没有语法规则(grammatical rule),但是它有句法规则(syntax rule)。 任何XML文档对任何类型的应用以及正确的解析都必须是良构的(well-formed),即每一个打开的标签都必须有匹配的结束标签,不得 含有次序颠倒的标签,并且在语句构成上应符合技术规范的要求。XML文档可以是有效的(valid),但并非一定要求有效。所谓有效文档是指其符合其文档 类型定义(DTD)的文档。如果一个文档符合一个模式(schema)的规定,那么这个文档是"模式有效的(schema valid)"。 XML文件在存储、交换和传输数据信息上有着很方便处理,那么今天这篇文章主要讲一下用C#如何实现对XML文件的基本操作, 如:创建xml文件,增、删、改、查xml的节点信息。所使用的方法很基础,方便易懂(用于自己的学习和记忆只需,同时也希望能够给你带来一些帮助, 如有不合适的地方欢迎大家批评指正)。 本文的主要模块为: ①:生成xml文件 ②:遍历xml文件的节点信息 ③:修改xml文件的节点信息 ④:向xml文件添加节点信息 ⑤:删除指定xml文件的节点信息假设我们需要设计出这样的一个xml文件来存储相应的信息,如下所示: Lenovo 5000 IBM 10000 那么如何生成这个xml文件?又怎么读取这个xml文件的节点信息,以及如何对这个xml文件的节点信息作相应的操作?请看如下代码示例: 【注:因为我们要使用xml相关的语法和方法,所以一定要引入命名空间System.Xml】1using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Xml; 6 7 namespace OperateXML 8{

SQL对Xml字段的操作 T-Sql操作Xml数据

SQL对Xml字段的操作 T-Sql操作Xml数据 一、前言 SQL Server 2005 引入了一种称为XML 的本机数据类型。用户可以创建这样的表,它在关系列之外还有一个或多个XML 类型的列;此外,还允许带有变量和参数。为了更好地支持XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象(BLOB)。 用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中。 随着SQL Server 对XML字段的支持,相应的,T-SQL语句也提供了大量对XML操作的功能来配合S QL Server中XML字段的使用。本文主要说明如何使用SQL语句对XML进行操作。 二、定义XML字段 在进行数据库的设计中,我们可以在表设计器中,很方便的将一个字段定义为XML类型。需要注意的是,XML字段不能用来作为主键或者索引键。同样,我们也可以使用SQL语句来创建使用XML字段的数据表,下面的语句创建一个名为“docs”的表,该表带有整型主键“pk”和非类型化的XML 列“xCol”:CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not null) XML类型除了在表中使用,还可以在存储过程、事务、函数等中出现。下面我们来完成我们对XML操作的第一步,使用SQL语句定义一个XML类型的数据,并为它赋值: declare @xmlDoc xml; set @xmlDoc=' C Program David 21 ' 三、查询操作 在定义了一个XML类型的数据之后,我们最常用的就是查询操作,下面我们来介绍如何使用SQL语句来进行查询操作的。 在T-Sql中,提供了两个对XML类型数据进行查询的函数,分别是query(xquery)和value(xquery, dataType),其中,query(xquery)得到的是带有标签的数据,而value(xquery, dataType)得到的则是标签的内容。接下类我们分别使用这两个函数来进行查询。 1、使用query(xquery) 查询 我们需要得到书的标题(title),使用query(xquery)来进行查询,查询语句为: select @xmlDoc.query('/book/title') 运行结果如图:

XMLDocument对xml文件的增删改查操作

从结构上讲.XmlElement是XmlNode 派生类. 所以两者比较没什么意义. XmlNode 为抽像类, 不能直接实例化. 已知有一个xml文件(bookstore.xml)如下: Oberon's Legacy Corets, Eva 5.95 1、往节点中插入一个节点: XmlDocument xmlDoc=new XmlDocument(); xmlDoc.Load("bookstore.xml"); XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找 XmlElement xe1=xmlDoc.CreateElement("book");//创建一个节点 xe1.SetAttribute("genre","李赞红");//设置该节点genre属性 xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性 XmlElement xesub1=xmlDoc.CreateElement("title"); xesub1.InnerText="CS从入门到精通";//设置文本节点 xe1.AppendChild(xesub1);//添加到节点中 XmlElement xesub2=xmlDoc.CreateElement("author"); xesub2.InnerText="候捷"; xe1.AppendChild(xesub2); XmlElement xesub3=xmlDoc.CreateElement("price"); xesub3.InnerText="58.3"; xe1.AppendChild(xesub3); root.AppendChild(xe1);//添加到节点中 xmlDoc.Save("bookstore.xml"); //=============================================== 结果为:

C#程序:如何创建xml文件以及xml文件的增、删、改、查

C#程序:如何创建xml文件以及xml文件的增、删、改、查 其实今天的这篇博文,是对请几天发表的博文的一个总结,只是想把xml文件的增删改查结合起来,这样更容易让初学的朋友理解,废话也不多说了,开始吧! 下面是我把我在vs环境下写的代码ctrl+V然后ctrl+V了的,课根据自己的需要执行相应的方法 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.IO; namespace WriteXml { class Program { static void Main(string[] args) { //createXml();//创建文件和添加基本数据,便于之后操作实验 //addItem();//追加数据 readtext();//读取数据 //updatexml();//更新数据 //delnode();//删除数据 } private static void createXml() { XmlTextWriter writer = new XmlTextWriter("titles.xml", null); //使用自动缩进便于阅读 writer.Formatting = Formatting.Indented; //写入根元素 writer.WriteStartElement("items"); writer.WriteStartElement("item"); //写入属性及属性的名字 writer.WriteAttributeString("类别", "文学"); writer.WriteAttributeString("品质", "优"); //加入子元素 writer.WriteElementString("title", "毛著"); writer.WriteElementString("author", "毛泽东"); writer.WriteElementString("price", "10.0"); //关闭根元素,并书写结束标签 writer.WriteEndElement(); writer.WriteEndElement(); //将XML写入文件并且关闭XmlTextWriter writer.Close();

VB NET与XML之间的操作

Imports System.Xml'声明XML Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click Dim dataset As New DataSet'声明一个dataset dataset.ReadXml("f:¥aaa.xml")'读xml文件,并把xml文件放入到datset的第一个表中 Dim table As DataTable=dataset.Tables(0)'读出该表 Dim view As DataView=New DataView(table)'自定义视图 DataGridView1.DataSource=view'绑定数据源 End Sub Public Sub appear()'同上 Dim dataset As New DataSet dataset.ReadXml("f:¥aaa.xml") Dim table As DataTable=dataset.Tables(0) Dim view As DataView=New DataView(table) DataGridView2.DataSource=view End Sub Private Sub Button2_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button2.Click Dim xmlDou As XmlDocument=New XmlDocument()'声明一个xml文档对象 xmlDou.Load("f:¥aaa.xml")'将特定的xml文档写入xmldoucument Dim xmlnode As XmlNode=xmlDou.SelectSingleNode("bookstore")'声明一个根标记,bookstore为根标记 Dim xml1As XmlElement=xmlDou.CreateElement("book")'声明一个xml 的节点 xml1.SetAttribute("genre","李簪红")'节点的属性 xml1.SetAttribute("ISBN","2-3621-4")'同上 Dim xml1_title As XmlElement=xmlDou.CreateElement("title")'声明一个xml的节点 xml1_title.InnerText="C#程序设计入门与技巧"'定义节点的文档 xml1.AppendChild(xml1_title)'向总节点尾部添加节点 Dim xml1_author As XmlElement=xmlDou.CreateElement("author")'同上xml1_author.InnerText="张永斌"

java操作word(利用xml模板)

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Document; import org.w3c.dom.Element; public class OperateXml { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub OperateXml ox = new OperateXml(); ox.operateXml(); } public void operateXml() { try { DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new File("D:/贷前核查输出模板.xml")); Element element = document.getDocumentElement(); // 得到所有表格集合 NodeList tblList = element.getElementsByTagName("w:tbl");// w:t标签组 // 得到第一张表

xml练习题

XML练习题 一、填空题 1.定义电子文档结构和描述其内容的国际标准语言是,它是所有电子文档标记语言的起源。 2.能够描述其他语言及其语法和词汇表的语言称为。 3.XML文档的声明中的编码方式常用的有和GB2312。 4.HTML是用所定义的,即是SGML的一个应用。 5.XML元素由、结束标记和两者之间的内容三个部分组成。 7.XML属性的声明位置是。 8.XML文档中用来包含文本的组件是。 9.是解决XML元素多义性和名字冲突问题的方案。 10.XML是的一个子集。 11. 当XML文档符合时,称该文档是“良好格式的”(Well-formed)。 12.每个XML文档都分为两个部分:和。 13.<?xml version=”1.0”encoding=”GB2312” ?>就是一个。 14.XML 文档内容的主体部分,一般由、、、注释和内容组成。 15.XML文档中一共有四类元素,分别为,仅含有文本的,含子元素、文本或混合元素的元素。 16. XML Schema两种重要的模型是Microsoft XML Schema和。 17. Microsoft XML Schema 和W3C XML Schema 分别使用AttributeType 和声明XML文档属性。 18. 命名空间的声明一般放置在,其使用语法如下所示: xmlns:prefix=“URI” 19. XML模式负责定义和描述XML文档的结构和内容。定义XML文档中存在哪些元素和元素之间的关系,还可以定义元素和属性的数据类型。 20.所有Schema文档都必须要使用作为其根元素。 21.声明用户自定义的简单数据类型使用关键字。 22.声明复杂数据类型使用关键字。 23.Schema文档中,用于声明元素的element元素的属性minOccurs的作用是。 24. XSLT是一种将XML文档转换成其他形式文档的技术。现在常用的两种技术分别是: 和。 25. XSLT处理过程涉及4个要素:XSLT处理器、输入XML文档、输入XSLT文档和输出文档。 26. 每一个XSLT样式表中都有一个应用到根节点的模板。 27. 一个格式良好XSL文件是由标记和HTML标记组成。 28.模板是的集合,都使用定义XML数据显示的样式。 29.使用标记可以对多个同名的节点访问,并且该节点可以设置在显示数据的时候,可以按升序或降序显示。 30.可以在XSL文件中使用创建一个标记,设置标记的名称,通过 标记可以为创建的设置相应的属性。 31.在XSL中使用样式表CSS有两种方式:一种直接通过嵌入的HTML标记中的属性style·来设置该标记以实现样式的定义,另外一种是把CSS代码放在之间。

Java解析XML文件

Java解析XML文件 ========================================== xml文件 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>四川省XX市XX乡XX村XX组</ADDR> </VALUE> </RESULT> ========================================== 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 import java.io.*; import java.util.*; import org.w3c.dom.*; import javax.xml.parsers.*; public class MyXMLReader{ public static void main(String arge[]){ long lasting =System.currentTimeMillis(); try{ File f=new File("data_10k.xml"); DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc = builder.parse(f); NodeList nl = doc.getElementsByT agName("VALUE"); for (int i=0;i<nl.getLength();i++){ System.out.print("车牌号码:" +

相关文档
最新文档