XML拓展

目录

一、XML检索技术:Xpath

1、如果我们需要从XML文件中检索需要的某个信息(如name)怎么解决?

2、实现步骤:

3、Xpath的四大检索方案 

3.1、绝对路径

 3.2、相对路径 

 3.3、全文检索

 3.4、属性查找

二、设计模式:工厂模式

1、什么是工厂设计模式?

2、工厂设计模式的作用:

三、设计模式:装饰模式

1、什么是装饰设计模式?

2、装饰设计模式的作用:


一、XML检索技术:Xpath

1、如果我们需要从XML文件中检索需要的某个信息(如name)怎么解决?

Dom4j需要进行文件的全部解析,然后再寻找数据。

Xpath技术更加适合做信息检索。

XPath介绍

XPath在解析XML文档方面提供了一独树一帜的路径思想,更加优雅,高效

XPath使用路径表达式来定位XML文档中的元素节点或属性节点。

需求:使用Dom4J把一个XML文件的数据进行解析

2、实现步骤:

1、导入jar包(dom4j和jaxen-1.1.2.jar),Xpath技术依赖Dom4j技术

2、通过dom4j的SAXReader获取Document对象

3、利用XPath提供的API,结合XPath的语法完成选取XML文档元素节点进行解析操作。

4、Document中与Xpath相关的API如下:

方法名

说明

Node selectSingleNode("表达式") 

获取符合表达式的唯一元素

List<Node> selectNodes("表达式") 

获取符合表达式的元素集合

3、Xpath的四大检索方案 

3.1、绝对路径

采用绝对路径获取从根节点开始逐层的查找/contactList/contact/name节点列表并打印信息

方法名

说明

/根元素/子元素/孙元素

从根元素开始,一级一级向下查找,不能跨级

演示代码:

/**
     1.绝对路径: /根元素/子元素/子元素。
     */
    @Test
    public void parse01() throws Exception {
        // a、创建解析器对象
        SAXReader saxReader = new SAXReader();
        // b、把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));
        // c、检索全部的名称
        List<Node> nameNodes = document.selectNodes("/contactList/contact/name");
        for (Node nameNode : nameNodes) {
            Element  nameEle = (Element) nameNode;
            System.out.println(nameEle.getTextTrim());
        }
    }

 结果展示:

 3.2、相对路径

先得到根节点contactList

再采用相对路径获取下一级contact 节点的name子节点并打印信息

方法名

说明

./子元素/孙元素

从当前元素开始,一级一级向下查找,不能跨级

演示代码:

/**
     2.相对路径: ./子元素/子元素。 (.代表了当前元素)
     */
    @Test
    public void parse02() throws Exception {
        // a、创建解析器对象
        SAXReader saxReader = new SAXReader();
        // b、把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));
        Element root = document.getRootElement();
        // c、检索全部的名称
        List<Node> nameNodes = root.selectNodes("./contact/name");
        for (Node nameNode : nameNodes) {
            Element  nameEle = (Element) nameNode;
            System.out.println(nameEle.getTextTrim());
        }
    }

 结果展示:

 

 3.3、全文检索

直接全文搜索所有的name元素并打印

代码展示:

/**
     3.全文搜索:
     //元素  在全文找这个元素
     //元素1/元素2  在全文找元素1下面的一级元素2
     //元素1//元素2  在全文找元素1下面的全部元素2
     */
    @Test
    public void parse03() throws Exception {
        // a、创建解析器对象
        SAXReader saxReader = new SAXReader();
        // b、把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));
        // c、检索数据
        //List<Node> nameNodes = document.selectNodes("//name");
        // List<Node> nameNodes = document.selectNodes("//contact/name");
        List<Node> nameNodes = document.selectNodes("//contact//name");
        for (Node nameNode : nameNodes) {
            Element  nameEle = (Element) nameNode;
            System.out.println(nameEle.getTextTrim());
        }
    }

结果展示:
 

 3.4、属性查找

在全文中搜索属性,或者带属性的元素

方法名

说明

//@属性名

查找属性对象,无论是哪个元素,只要有这个属性即可。

//元素[@属性名]

查找元素对象,全文搜索指定元素名和属性名。

//元素//[@属性名=‘值’]

查找元素对象,全文搜索指定元素名和属性名,并且属性值相等。

代码展示:

 /**
     4.属性查找。
     //@属性名称  在全文检索属性对象。
     //元素[@属性名称]  在全文检索包含该属性的元素对象。
     //元素[@属性名称=值]  在全文检索包含该属性的元素且属性值为该值的元素对象。
     */
    @Test
    public void parse04() throws Exception {
        // a、创建解析器对象
        SAXReader saxReader = new SAXReader();
        // b、把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));
        // c、检索数据
        List<Node> nodes = document.selectNodes("//@id");
        for (Node node : nodes) {
            Attribute attr = (Attribute) node;
            System.out.println(attr.getName() + "===>" + attr.getValue());
        }

        // 查询name元素(包含id属性的)
//      Node node = document.selectSingleNode("//name[@id]");
        Node node = document.selectSingleNode("//name[@id=888]");
        Element ele = (Element) node;
        System.out.println(ele.getTextTrim());
    }
}

结果展示::

 

二、设计模式:工厂模式

1、什么是工厂设计模式?

之前我们创建类对象时, 都是使用new 对象的形式创建,在很多业务场景下也提供了不直接new的方式 。

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,  这种类型的设计模式属于创建型模式,它提供了一种获取对象的方式。

2、工厂设计模式的作用:

工厂的方法可以封装对象的创建细节,比如:为该对象进行加工和数据注入。

可以实现类与类之间的解耦操作(核心思想)。

三、设计模式:装饰模式

1、什么是装饰设计模式?

创建一个新类,包装原始类,从而在新类中提升原来类的功能。

2、装饰设计模式的作用:

作用:装饰模式指的是在不改变原类的基础上, 动态地扩展一个类的功能。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
vscode最新插件合集(20190814)part1,共2个分包(part1/2),都下载后用命令“copy /b extensions.zip.rm1+extensions.zip.rm2 extensions.zip”合并再解压。 包合以下插件: wholroyd.jinja-0.0.8 daltonjorge.scala-0.0.5 eriklynd.json-tools-1.0.2 truman.autocomplate-shell-0.1.1 sensourceinc.vscode-sql-beautify-0.0.4 danields761.dracula-theme-from-intellij-pythoned-0.1.4 gerane.theme-druid-0.0.2 luqimin.forgive-green-0.2.1 mohsen1.prettify-json-0.0.3 chrmarti.regex-0.2.0 kalitaalexey.vscode-rust-0.4.2 ZakCodes.rust-snippets-0.0.1 itryapitsin.scala-0.1.7 itryapitsin.scalasnippets-0.1.7 vahidk.tensorflow-snippets-0.3.3 formulahendry.terminal-0.0.10 qub.qub-xml-vscode-1.2.8 waderyan.nodejs-extension-pack-0.1.9 jasonnutter.search-node-modules-1.3.0 christian-kohler.path-intellisense-1.4.2 christian-kohler.npm-intellisense-1.3.0 josephtbradley.hive-sql-0.0.4 magicstack.magicpython-1.1.0 ms-python.anaconda-extension-pack-1.0.1 mooman219.rust-assist-0.2.3 slevesque.vscode-hexdump-1.7.2 coenraads.bracket-pair-colorizer-1.0.61 bibhasdn.django-snippets-1.1.1 bibhasdn.django-html-1.3.0 octref.vscode-json-transform-0.1.2 xabikos.javascriptsnippets-1.7.2 jithurjacob.nbpreviewer-1.2.2 kondratiev.sshextension-0.5.0 humy2833.ftp-simple-0.7.0 batisteo.vscode-django-0.19.0 fwcd.kotlin-0.1.13 reditorsupport.r-lsp-0.1.0 ms-vsts.team-1.149.2 donjayamanne.jupyter-1.1.5 rust-lang.rust-0.6.1 grapecity.gc-excelviewer-2.1.32 vscjava.vscode-java-pack-0.7.1 ms-toolsai.vscode-ai-0.5.1 dbaeumer.vscode-eslint-1.9.0 ms-vscode.azure-account-0.8.4 rogalmic.bash-debug-0.3.5 donjayamanne.python-extension-pack-1.6.0 redhat.vscode-yaml-0.4.1 adisreyaj.swagger-snippets-0.0.1 alefragnani.bookmarks-10.4.4 arjun.swagger-viewer-2.2.2 dotjoshjohnson.xml-2.5.0 fisheva.eva-theme-0.7.7 vscjava.vscode-java-dependency-0.5.1 deerawan.vscode-hasher-1.0.1 vscjava.vscode-java-debug-0.20.0 scala-lang.scala-0.3.4 eg2.vscode-npm-script-0.3.8 vscjava.vscode-maven-0.18.1 ms-vscode.go-0.11.4 lextudio.restructuredtext-113.0.0 pkief.material-icon-theme-3.8.1 ms-azuretools.vscode-docker-0.7.0 redhat.java-0.47.0 julialang.language-julia-0.12.0 ms-kubernetes-tools.vscode-kubernetes-tools-1.0.2 yzhang.markdown-all-in-one-2.4.2 ms-vscode.cpptools-0.24.1 davidanson.vscode-markdownlint-0.30.1 zhuangtongfa.material-theme-2.26.3 formulahendry.code-runner-0.9.12 ikuyadeu.r-1.1.1 bitlang.cobol-5.2.4 vscjava.vscode-java-test-0.19.0 humao.rest-client-0.22.0 ms-ceintl.vscode-language-pack-zh-hans-1.37.3 ms-ceintl.vscode-language-pack-zh-hans-1.37.5 mtxr.sqltools-0.20.1 ms-vscode-remote.remote-wsl-0.39.2 alefragnani.bookmarks-10.5.0 ms-vsliveshare.vsliveshare-1.0.694 visualstudioexptteam.vscodeintellicode-1.1.9 ms-python.python-2019.8.30787 coenraads.bracket-pair-colorizer-2-0.0.28 dart-code.flutter-3.3.0 dart-code.dart-code-3.3.0 ibm.db2connect-win-1.0.2 oderwat.indent-rainbow-7.4.0 ms-vscode-remote.vscode-remote-extensionpack-0.16.0 ms-vscode-remote.remote-ssh-0.45.5 ms-vscode-remote.remote-ssh-edit-0.45.5 ms-vscode-remote.remote-containers-0.67.3 ms-vscode-remote.remote-ssh-explorer-0.45.5 foxundermoon.shell-format-6.1.1 qcz.text-power-tools-1.11.1 gruntfuggly.todo-tree-0.0.141 vscode-icons-team.vscode-icons-9.2.0 tomoki1207.pdf-0.5.0

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁༺๑小王不是程序员๑༻꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值