老师为什么我都xml文档用schema限制后,运行xpath查询结果就不显示???

老师为什么我都xml文档用schema限制后,运行xpath查询结果就不显示???

<?xml version="1.0" encoding="UTF-8"?>
<!-- 人力资源管理系统 -->
<hr xmlns="http://www.w3school.com.cn"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3school.com.cn  hr2.xsd">
    <employee id="e001">
        <name>张三</name>
        <age>31</age>
        <salary>4000</salary>
        <department>
            <dname>会计部</dname>
            <address>xx大厦-B103</address>
        </department>
    </employee>
    <employee id="e002">
        <name>李四</name>
        <age>41</age>
        <salary>5000</salary>
        <department>
            <dname>工程部</dname>
            <address>xx大厦-B303</address>
        </department>
    </employee>
    <employee id="e003">
        <name>王五</name>
        <age>55</age>
        <salary>10000</salary>
        <department>
            <dname>公关部</dname>
            <address>xx大厦-A001</address>
        </department>
    </employee>
</hr>
package com.mason.dom4j;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import java.util.List;

public class XPathTestor {
    public static void main(String[] args) {
        XPathTestor xPathTestor=new XPathTestor();
        xPathTestor.xpath("/hr/employee");
    }

    public void xpath(String xpathExp) {
        //传入参数为xPath表达式
        String file = "C:\\Users\\Mason\\IdeaProjects\\untitled\\src\\hr.xml";
        SAXReader reader = new SAXReader();
        try {
            Document document = reader.read(file);
            List<Node>nodes= document.selectNodes(xpathExp);
            for (Node node:nodes){
                Element emp=(Element) node;
                System.out.println(emp.elementText("name"));
                System.out.println(emp.elementText("age"));
                System.out.println(emp.elementText("salary"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

http://img1.sycdn.imooc.com//climg/5c95edca00014a8a12950882.jpg

运行成功没用报错,但就是不显示结果!!这是为什么呢?

但我后来把xml的Schema限制删了之后↓

<?xml version="1.0" encoding="UTF-8"?>
<!-- 人力资源管理系统 -->
<hr>
    <employee id="e001">
        <name>张三</name>
        <age>31</age>
        <salary>4000</salary>
        <department>
            <dname>会计部</dname>
            <address>xx大厦-B103</address>
        </department>
    </employee>
    <employee id="e002">
        <name>李四</name>
        <age>41</age>
        <salary>5000</salary>
        <department>
            <dname>工程部</dname>
            <address>xx大厦-B303</address>
        </department>
    </employee>
    <employee id="e003">
        <name>王五</name>
        <age>55</age>
        <salary>10000</salary>
        <department>
            <dname>公关部</dname>
            <address>xx大厦-A001</address>
        </department>
    </employee>
</hr>

http://img1.sycdn.imooc.com//climg/5c95ee4e000184d009890867.jpg

这样就可以正常显示出xpath后的结果,这是为什么呢?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,同学需要修改一下xml和xsd文件的头部,修改后xml文件的头部如:

<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:noNamespaceSchemaLocation="hr.xsd">

xsd文件的头部,如:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

这样就可以读取schema约束的xml文档了。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • MasonM 提问者 #1
    老师为什么要这样改?这跟W3school官网的引用约束不同喔?
    2019-03-25 16:10:46
  • 好帮手慕阿满 回复 提问者 MasonM #2
    同学你好,xml文件中存在命名空间导致document.selectNodes() 没有结果,所以修改一下就可以了。祝:学习愉快~
    2019-03-25 19:10:42
提问者 MasonM 2019-03-24 15:13:40
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.w3school.com.cn"
           xmlns="http://www.w3school.com.cn"
           elementFormDefault="qualified">
    <xs:element name="hr">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="employee" minOccurs="1" maxOccurs="10">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="name" type="xs:string"></xs:element>
                            <xs:element name="age" type="xs:integer"></xs:element>
                            <xs:element name="salary" type="xs:integer"></xs:element>
                            <xs:element name="department">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="dname" type="xs:string"></xs:element>
                                        <xs:element name="address" type="xs:string"></xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:string" use="required"></xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

这就是xsd约束文件

好帮手慕阿满 2019-03-24 15:07:32

同学你好,建议同学将Schema约束也贴上来,方便我们具体测试。

祝:学习愉快~

  • 提问者 MasonM #1
    老师我在新的回答中发了Schema约束
    2019-03-24 15:14:22
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师