使用jaxp对xml文件进行增删改查以及遍历操作

本文通过使用jaxp的方式来实现对于xml文件的增删改查操作,以最基础和简单的来做为实例,所操作的xml文件为person.xml,代码如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><person>
    <p1>
        <name>nike</name>
        <age>23</age>
    </p1>
    <p1>
        <name>tom</name>
        <age>25</age>
    </p1>
</person>
因为方便的关系,这里将这些操作放在同一个java文件中,通过函数的方式进行调用,代码如下:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

public class Textjaxp {

    public static void main(String[] args) throws Exception {

        //getNameValue();         //获取xml中标的签值
        //getSingleNameValue();   //获取xml中某个标签值
        //addNode();              //添加节点
        //removeNode();           //修改节点
        //deleteNode();           //删除节点
        showAllNodeName();        //遍历所有节点,使用递归的思想

    }



    private static void showAllNodeName() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //创建Xml解析器工厂

        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //创建Xml解析器
        Document doc = builder.parse("src/person.xml");
        //解析xml返回document
        show(doc);

    }



    private static void show(Node node) {
        if(node.getNodeType()==Node.ELEMENT_NODE){
        System.out.println(node.getNodeName());
        }
        //判断是否为节点
        NodeList list = node.getChildNodes();

        for(int i=0;i<list.getLength();i++)
        {
            Node node1 = list.item(i);

            show(node1);//递归调用


        }

    }




    private static void deleteNode() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = builderFactory.newDocumentBuilder();

        Document doc = builder.parse("src/person.xml");

        NodeList list = doc.getElementsByTagName("sex");

        Node sex = list.item(0);

        Node parent = sex.getParentNode();

        parent.removeChild(sex);
        //xml回写(只要xml文件有改动都需要回写操作,否则结果不会改动xml文件)
        TransformerFactory transformerFactory = TransformerFactory.newInstance();

        Transformer transformer = transformerFactory.newTransformer();

        transformer.transform(new DOMSource(doc), new StreamResult("src/person.xml"));
    }




    private static void removeNode() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = builderFactory.newDocumentBuilder();

        Document doc = builder.parse("src/person.xml");

        NodeList list = doc.getElementsByTagName("sex");

        Node sex1 = list.item(0);

        sex1.setTextContent("nan");

        TransformerFactory transformerFactory = TransformerFactory.newInstance();

        Transformer transformer = transformerFactory.newTransformer();

        transformer.transform(new DOMSource(doc), new StreamResult("src/person.xml"));
    }




    private static void addNode() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = builderFactory.newDocumentBuilder();

        Document document = builder.parse("src/person.xml");

        NodeList list = document.getElementsByTagName("p1");

        Node p1 = list.item(0);

        Element sex1 = document.createElement("sex");

        Text text1 = document.createTextNode("nv");

        sex1.appendChild(text1);

        p1.appendChild(sex1);

        TransformerFactory transformerFactory = TransformerFactory.newInstance();

        Transformer transformer = transformerFactory.newTransformer();

        transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));

    }




    private static void getSingleNameValue() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = builderFactory.newDocumentBuilder();

        Document doc = builder.parse("src/person.xml");

        NodeList list = doc.getElementsByTagName("name");

        Node name = list.item(0);

        String nameValue = name.getTextContent();

        System.out.println(nameValue);      
    }




    private static void getNameValue() throws Exception {
        // TODO Auto-generated method stub
        DocumentBuilderFactory buliBuilderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = buliBuilderFactory.newDocumentBuilder();

        Document document =  builder.parse("src/person.xml");

        NodeList names = document.getElementsByTagName("name");

        for(int i =0;i<names.getLength();i++)
        {
            Node name = names.item(i);

            String namevalue = name.getTextContent();

            System.out.println(namevalue);
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XML文件遍历查询,可以使用XPath表达式来选择节点。XPath是一种语言,它允许从XML文档中选择节点或节点集合。在Java中,可以使用Java API for XML Processing (JAXP)来解析XML文档并使用XPath表达式来选择节点。 以下是一个示例代码,演示如何使用XPath表达式来选择具有特定属性值的节点: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.*; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class XPathExample { public static void main(String[] args) throws Exception { // 创建一个DocumentBuilderFactory对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 创建一个DocumentBuilder对象 Document document = factory.newDocumentBuilder().parse("path/to/xml/file.xml"); // 创建一个XPath对象 XPath xpath = XPathFactory.newInstance().newXPath(); // 使用XPath表达式查询具有特定属性值的节点 String expression = "//pkId[@value='123']"; NodeList nodes = (NodeList) xpath.evaluate(expression, document, XPathConstants.NODESET); // 遍历查询结果 for (int i = 0; i < nodes.getLength(); i++) { System.out.println(nodes.item(i).getNodeName() + " = " + nodes.item(i).getTextContent()); } } } ``` 在这个示例中,XPath表达式 `//pkId[@value='123']` 表示选择所有具有 `value` 属性值为 `123` 的 `pkId` 元素。`xpath.evaluate()` 方法返回一个 `NodeList` 对象,其中包含了所有符合条件的节点。我们可以遍历这个节点列表,然后获取节点的名称和文本内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值