xml文件内容的读写

本文详细介绍了XML DOM解析的概念与方法,包括如何使用JavaScript和Java进行DOM访问和编辑,具体展示了如何加载XML文件、使用DOM方法操作节点,以及Java端解析XML的流程与实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xml DOM
XML DOM (XML Document Object Model) 定义了访问和操作 XML 文档的标准方法。

DOM 把 XML 文档作为树结构来查看。能够通过 DOM 树来访问所有元素。可以修改或删除它们的内容,并创建新的元素。元素,它们的文本,以及它们的属性,都被认为是节点。

1 DOM 是这样规定的:

?整个文档是一个文档节点
?每个 XML 标签是一个元素节点
?包含在 XML 元素中的文本是文本节点
?每一个 XML 属性是一个属性节点
?注释属于注释节点


解析方式
1 大多数浏览器都内建了供读取和操作 XML 的 XML 解析器。

解析器把 XML 转换为 JavaScript 可存取的对象。
 ####文件加载
function loadXMLDoc(dname)
{
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
  catch(e) {alert(e.message)}
  }
try
  {
  xmlDoc.async=false;
  xmlDoc.load(dname);
  return(xmlDoc);
  }
catch(e) {alert(e.message)}
return(null);
}


 ####字符串加载
function loadXMLDoc(dname)
{

try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async="false";
  xmlDoc.loadXML(text);

  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    parser=new DOMParser();
    xmlDoc=parser.parseFromString(text,"text/xml");
  

    }
  catch(e) {alert(e.message)}
  }
try
  {
  document.write("xmlDoc 已加载,可以使用。");
 return(xmlDoc);
  }
catch(e) {alert(e.message)}
}
#####可以使用xml dom的方法进行访问编辑节点

一些典型的 DOM 属性:

?x.nodeName - x 的名称
?x.nodeValue - x 的值
?x.parentNode - x 的父节点
?x.childNodes - x 的子节点
?x.attributes - x 的属性节点

XML DOM 方法
?x.getElementsByTagName(name) - 获取带有指定标签名称的所有元素
?x.appendChild(node) - 向 x 插入子节点
?x.removeChild(node) - 从 x 删除子节点

比如:
txt=xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue

2 java端解析

  private Document document;
 public void createXml(String fileName)
    {
        Element root = this.document.createElement("employees");
        this.document.appendChild(root);//元素的内部后面添加节点
        Element employee = this.document.createElement("employee");
        Element name = this.document.createElement("name");
        name.appendChild(this.document.createTextNode("丁宏亮"));
        employee.appendChild(name);
        Element sex = this.document.createElement("sex");
        sex.appendChild(this.document.createTextNode("m"));
        employee.appendChild(sex);
        Element age = this.document.createElement("age");
        age.appendChild(this.document.createTextNode("30"));
        employee.appendChild(age);
        root.appendChild(employee);
        TransformerFactory tf = TransformerFactory.newInstance(); //建立一个TransformerFactory对象
        try {
            Transformer transformer = tf.newTransformer(); //调用newTransformer()方法得到一个Transformer对象
            DOMSource source = new DOMSource(document); //将要变换的document对象封装到DOMSouce对象里。
            transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
            StreamResult result = new StreamResult(pw); //再将要生成的XML的文件封装到StreamReasult对象里。
            transformer.transform(source, result); //用Transformer的Transformer方法,就可以生成XML文件了
            System.out.println("生成XML文件成功!");
            } catch (TransformerConfigurationException e)
            { System.out.println(e.getMessage()); }
            catch (IllegalArgumentException e) { System.out.println(e.getMessage()); }
            catch (FileNotFoundException e) { System.out.println(e.getMessage()); }
            catch (TransformerException e) { System.out.println(e.getMessage()); }
    }
    public void parserXml(String fileName)
    {
       
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document document = db.parse(fileName);
            NodeList employees = document.getChildNodes();
            for (int i = 0; i < employees.getLength(); i++)
            {
                Node employee = employees.item(i);
                NodeList employeeInfo = employee.getChildNodes();
                for (int j = 0; j < employeeInfo.getLength(); j++)
                {
                    Node node = employeeInfo.item(j);
                    NodeList employeeMeta = node.getChildNodes();
                    for (int k = 0; k < employeeMeta.getLength(); k++)
                    {
                        System.out.println(employeeMeta.item(k).getNodeName() + ":" + employeeMeta.item(k).getTextContent());  
                    }
                   
                }
               
               
            }
            
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
主要用到element对象和node对象

Element 对象表示 XML 文档中的元素。由于元素对象也是一种节点,因此它可继承 Node 对象的属性和方法。


1 获取元素值
getElementsByTagName()方法返回拥有指定标签名的所有元素的 NodeList。document.getElementsByTagName(elementName);

如果用node的方法,那就是document.getChildNodes()(不需要知道标签名,可以解析文档)。都可以求得nodelist,然后转换为node,nodelist.item(i)。

getNodeName()(获得node的标签名),getTextContent()(获得值)

 

node转换为element
 Node nd=nodelist.item(i);
if (Node.ELEMENT_NODE == nd.getNodeType())
{                                             
element = (Element) nd;
return element;
}
2 获取元素属性

element.getAttribute("指定属性") - 获取指定属性的值

主要用这几个方法,还有其他的node方法和element方法也可以使用。


3 创建元素(从上往下,从里往外)

document.createElement(String tagName)(返回element)创建节点

document.createTextNode("丁宏亮")创建文本节点

element.setAttribute("age", "22");


el1.appendChild(el2)。在el1节点已有节点的后面的后面添加el2,el1是el2的父节点


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值