导航:首页 > 编程语言 > javaxml解密

javaxml解密

发布时间:2025-06-14 10:24:49

java的xml的解析方式有什么,他们的解析流程是怎么样的,有什么区别

DOM4J,JDOM,SAX
public class DomTest3
{
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();

Document doc = db.parse(new File("student.xml"));
//获得根元素结点
Element root = doc.getDocumentElement();

parseElement(root);
}

private static void parseElement(Element element)
{
String tagName = element.getNodeName();

NodeList children = element.getChildNodes();

System.out.print("<" + tagName);

//element元素的所有属性所构成的NamedNodeMap对象,需要对其进行判断
NamedNodeMap map = element.getAttributes();

//如果该元素存在属性
if(null != map)
{
for(int i = 0; i < map.getLength(); i++)
{
//获得该元素的每一个属性
Attr attr = (Attr)map.item(i);

String attrName = attr.getName();
String attrValue = attr.getValue();

System.out.print(" " + attrName + "=\"" + attrValue + "\"");
}
}

System.out.print(">");

for(int i = 0; i < children.getLength(); i++)
{
Node node = children.item(i);
//获得结点的类型
short nodeType = node.getNodeType();

if(nodeType == Node.ELEMENT_NODE)
{
//是元素,继续递归
parseElement((Element)node);
}
else if(nodeType == Node.TEXT_NODE)
{
//递归出口
System.out.print(node.getNodeValue());
}
else if(nodeType == Node.COMMENT_NODE)
{
System.out.print("<!--");

Comment comment = (Comment)node;

//注释内容
String data = comment.getData();

System.out.print(data);

System.out.print("-->");
}
}
System.out.print("</" + tagName + ">");
}
}
public class SaxTest1
{
public static void main(String[] args) throws Exception
{
//step1: 获得SAX解析器工厂实例
SAXParserFactory factory = SAXParserFactory.newInstance();

//step2: 获得SAX解析器实例
SAXParser parser = factory.newSAXParser();

//step3: 开始进行解析
parser.parse(new File("student.xml"), new MyHandler());

}
}

class MyHandler extends DefaultHandler
{
@Override
public void startDocument() throws SAXException
{
System.out.println("parse began");
}

@Override
public void endDocument() throws SAXException
{
System.out.println("parse finished");
}

@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
System.out.println("start element");
}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException
{
System.out.println("finish element");
}
}

public class JDomTest1
{
public static void main(String[] args) throws Exception
{
Document document = new Document();

Element root = new Element("root");

document.addContent(root);

Comment comment = new Comment("This is my comments");

root.addContent(comment);

Element e = new Element("hello");

e.setAttribute("sohu", "www.sohu.com");

root.addContent(e);

Element e2 = new Element("world");

Attribute attr = new Attribute("test", "hehe");

e2.setAttribute(attr);

e.addContent(e2);

e2.addContent(new Element("aaa").setAttribute("a", "b")
.setAttribute("x", "y").setAttribute("gg", "hh").setText("text content"));

Format format = Format.getPrettyFormat();

format.setIndent(" ");
// format.setEncoding("gbk");

XMLOutputter out = new XMLOutputter(format);

out.output(document, new FileWriter("jdom.xml"));

}
}

⑵ 在java在如何解析XML文件

在Java环境中处理XML文件主要有四种方法:DOM(Document Object Model)、SAX(Simple API for XML)、JDOM以及JAXB(Java Architecture for XML Binding)。DOM是一种由W3C提供的方法,它将整个XML文件加载到内存中,并构建一棵数据树,以便快速访问各个节点。这种方法对系统性能要求较高,适合较小的XML文件,但对于较大的文档来说,可能不是最佳选择。

DOM API直接遵循XML规范,每个节点都是基于Node接口的,从多态性的角度来看,这是一种优秀的实现。然而,在Java中使用时,这种设计并不十分方便,且可读性较差。

以DOM为例,我们可以通过以下代码导入必要的包:

<pre>
<code>
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.XmlDocument;
</code>
</pre>

接下来,我们创建一个DocumentBuilderFactory实例,并设置其属性:

<pre>
<code>
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
</code>
</pre>

然后,我们通过DocumentBuilderFactory获得一个DocumentBuilder实例,并解析XML文件:

<pre>
<code>
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(fileURI);
</code>
</pre>

接下来,我们获取根节点并遍历所有student节点:

<pre>
<code>
Element elmtStuInfo = doc.getDocumentElement();
NodeList nlStudent = elmtStuInfo.getElementsByTagNameNS(strNamespace, "student");
for (int i = 0; i < nlStudent.getLength(); i++) {
Element elmtStudent = (Element)nlStudent.item(i);
NodeList nlCurrent = elmtStudent.getElementsByTagNameNS(strNamespace, "name");
}
</code>
</pre>

总之,DOM方法虽然功能强大,但对大文件处理效率较低,且在Java中的应用不够直观。在实际开发中,可根据具体需求选择合适的解析方式。

⑶ Java解析XML的几种方法

  1. DOM解析

    ①构建Document对象:


    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();


    DocumentBuilder db = bdf.newDocumentBuilder();


    InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(xml文件);

Document doc = bd.parse(is);


②遍历DOM对象


Document: XML文档对象,由解析器获取


NodeList: 节点数组


Node: 节点(包括element、#text)


Element: 元素,可用于获取属性参数

  1. SAX(Simple API for XML)解析

    【DefaultHandler类】


    SAX事件处理程序的默认基类,实现了DTDHandler、ErrorHandler、ContextHandler和EntityResolver接口,通常
    做法是,继承该基类,重写需要的方法,如startDocument()


    【创建SAX解析器】


    SAXParserFactory saxf = SAXParserFactory.newInstance();


    SAXParser sax = saxf.newSAXParser();


    注:关于遍历


    ①深度优先遍历(Depthi-First Traserval)


    ②广度优先遍历(Width-First Traserval)

  2. JDOM(Java-based Document Object Model)

  3. DOM4J(Document Object Model for Java)

  4. StAX(Streaming API for XML)

⑷ java解析xml文件

SaxReader reader = new SaxReader();
Document doc = reader.read(new File("class.xml"));
Element element = doc.getRootElement();//获取根元素

迭代器:取根元素下的子元素名称
Iterator<Element> iter = element.elementIterator();
while(iter.hashNext){
Element el = (Element)iter.next();
el.getName();//获取元素名称
el.getText();//获取元素值
}

//获取属性名称、值
Iterator<Attribute> iter1 = element.attributeIterator();
while(iter1.hashNext()){
Attribute el = (Attribute)iter1.next();
el.getName();el.getValue();//获取属性名称和值
}

如果取所有,则用递归取:
public void getInfo(Element root){
Iterator<Element> iter = root.getElementIterator();
while(iter.hashNext()){
Element element = (Element)iter.next();
getInfo(element);//自己调用自己 递归方法
}
}

阅读全文

与javaxml解密相关的资料

热点内容
word文本分栏 浏览:734
tarcvf打包文件夹 浏览:333
集体舞找不到文件怎么回事 浏览:308
写app是什么 浏览:957
qq安全老版本下载安装 浏览:315
miui怎么发网络短信 浏览:364
微信迁移文件查不到 浏览:493
dnf90版本鳗鱼加点 浏览:351
贵阳大数据人才指什么 浏览:984
微信里数据包含哪些 浏览:794
无线路由器怎么重新设置密码 浏览:671
qq搞笑可爱动态图片 浏览:891
软件设计中标文件怎么打印 浏览:202
javaseek10 浏览:288
齐鲁银行app怎么定期存款 浏览:358
哪个网站可以自学cg 浏览:811
手机里面如何压缩文件 浏览:868
excel如何对比两份文件的不同之处 浏览:854
华为双系统的文件怎么互发 浏览:247
中原银行app如何查看自己欠债 浏览:54

友情链接