首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >XHR、XPath和自定义本地XML模式

XHR、XPath和自定义本地XML模式
EN

Stack Overflow用户
提问于 2015-06-14 12:22:28
回答 1查看 227关注 0票数 0

虽然在(X)HTML5 (例如SVGs)中使用XML扩展是有可能的,但使用XPaths解析XHTML5文档(用自定义的本地XSD进行扩展)却会产生意想不到的结果。

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html xmlns:hp="http://homepage.org/homepage" 
      hp:schemaLocation="http://homepage.org ./schemas/homepage.xsd">
  <head>
    ...
  </head>
  <body>
    <hp:homepage title="Homepage">
    <header>
      <h1></h1>
    </header>
    ...

使用通常的NSResolver逻辑会导致命名空间错误:

代码语言:javascript
运行
AI代码解释
复制
  var hpResolver = document.createNSResolver( document.ownerDocument == null ? document.documentElement : document.ownerDocument.documentElement);

并且创建自定义处理程序不会导致错误,但是XPath仍然没有返回预期的结果:

代码语言:javascript
运行
AI代码解释
复制
  var hpResolver = function (prefix) {
    if (prefix === 'hp') {
      return 'http://homepage.org/homepage';
    } else {
      return null;
    }
  };

XSD是与其他文件一起提供的,并且正在本地文件系统上进行测试,而不是在服务器上进行测试。

XPath查询如下:

代码语言:javascript
运行
AI代码解释
复制
  var path = '/html/body/hp:homepage/header/h1';
  var headTitle = document.evaluate(path, document, hpResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

以上示例都是简单地作为示例编写的。

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://homepage.org/homepage"
           xmlns="http://homepage.org/homepage"
           elementFormDefault="qualified">

  <xs:element name="homepage">
    <xs:complexType>
      <xs:sequence>
        <xs:attribute name="title" type="xs:string" use="required" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-15 00:48:12

我认为模式根本不重要,因为浏览器没有模式支持的验证解析器。重要的是名称空间,如果要使用自定义元素和名称空间,则需要确保正确使用XHTML5,确保元素位于命名空间中,确保将文档作为application/xhtml+xml提供服务(只有这样,理解名称空间的浏览器才会解析文档,不支持命名空间的HTML5解析器才会解析text/html解析器)。

基于此,我创建了示例http://home.arcor.de/martin.honnen/html/test2015061502.xhtml,其中包含以下代码

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>XMLHttpRequest and DOM Level 3 XPath API test with 'application/xhtml+xml' document</title>
<script type="text/javascript"><![CDATA[
function test() {
  var req = new XMLHttpRequest();
  req.open('GET', 'test2015061501.xhtml', true);
  req.onload = function() {
    var doc = req.responseXML;
    var res = function(prefix) {
      if (prefix === 'xhtml') {
        return 'http://www.w3.org/1999/xhtml';
      }
      else if (prefix === 'hp') {
        return 'http://example.com/hp';
      }
      else {
        return null;
      }
    }
    var path = '/xhtml:html/xhtml:body/hp:homepage/xhtml:header/xhtml:h1';
    var val = doc.evaluate(path, doc, res, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    document.body.insertAdjacentHTML('beforeEnd', '<p>Found ' + val + '</p>');
  };
  req.send();
}

window.onload = test;
]]></script>
</head>
<body>
<h1>XMLHttpRequest and DOM Level 3 XPath API test with 'application/xhtml+xml' document</h1>
</body>
</html>

并加载http://home.arcor.de/martin.honnen/html/test2015061501.xhtml,其中在XHTML命名空间中包含元素,在自定义命名空间中加载元素:

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:hp="http://example.com/hp" 
      hp:schemaLocation="http://example.com/hp ./schemas/homepage.xsd">
  <head>
    ...
  </head>
  <body>
    <hp:homepage title="Homepage">
      <header>
        <h1>I am a heading</h1>
      </header>
    </hp:homepage>
  </body>
</html>

第一个文档中的XPath 1.0表达式是/xhtml:html/xhtml:body/hp:homepage/xhtml:header/xhtml:h1,可以找到/xhtml:html/xhtml:body/hp:homepage/xhtml:header/xhtml:h1 h1 HTMLHeadingElement元素,这两个元素都是使用Firefox38和Chrome43。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30834128

复制
相关文章
XML 的 XPath 语法
2018-06-24 11:43
walterlv
2018/09/18
1.1K0
XML&Xpath解析
2.Java中3种配置位置及读取方式   2.1如何使用Properties读取配置文件​编辑
天蝎座的程序媛
2022/11/18
4720
XML&Xpath解析
JavaScript设计模式--桥梁模式--XHR连接队列
们要构建一个队列,队列里存放了很多ajax请求,使用队列(queue)主要是因为要确保先加入的请求先被处理。任何时候,我们可以暂停请求、删除请求、重试请求以及支持对各个请求的订阅事件。
wfaceboss
2019/04/08
7290
JavaScript设计模式--简单工厂模式例子---XHR工厂
第一步,Ajax操作接口(目的是起一个接口检测作用)    (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方法不要写出Interface.prototype ,因为这是写到接口的原型链上的 //我们要把静态的函数直接写到类层次上 //(1)定义一个接口类 var Interface=function (name,methods) {//name:接口名字 if(arguments.length<2){ alert("必须是两个参数") }
wfaceboss
2019/04/08
4420
C#通过XPath解析xml文件
xpath语法讲解:http://www.w3school.com.cn/xpath/xpath_syntax.asp
提莫队长
2019/02/21
1.5K0
.NET 使用 XPath 来读写 XML 文件
发布于 2018-06-24 13:10 更新于 2018-09-01 00:02
walterlv
2018/09/18
1.6K0
Python爬虫11-XML与XPath
GitHub代码练习地址:用lxml解析HTML,文件读取,etree和XPath的配合使用:https://github.com/Neo-ML/PythonPractice/blob/master/SpiderPrac17_xpath%26lxml.py XML - XML(EXtensibleMarkupLanguage) - 官方文档http://www.w3school.com.cn/xml/index.asp - 概念:父节点,子节点,先辈节点,兄弟节点,后代节点 XPath - XPat
py3study
2020/01/16
5490
Flink本地模式安装和使用
不同版本的Flink对JDK版本要求不尽相同,需要根据具体的Flink版本要求先安装好JDK环境。 通常,在Flink的Release Notes中有对应JDK版本的说明,如:Release Notes for Flink 1.15 ,要求安装JDK11。 下载JDK 并进行安装配置。
编程随笔
2022/10/05
7230
Flink本地模式安装和使用
java:利用xpath删除xml中的空节点
原始xml内容: 1 <data> 2 <a> </a> 3 <b>b1</b> 4 <awb> 5 <awbpre>123</awbpre> 6 <awbno></awbno> 7 </awb> 8 <spls> 9 <spl /> 10 </spls> 11 </data> 可用下面的代码去掉 <awbno></awbno>、<spls><spl/></spls>这二个空节点 (注<a> </a>中间有一个空格,不算空节点) 1
菩提树下的杨过
2018/01/24
2.5K0
xpath 和 pyquery
主题: **xpath 和 pyquery ** xpath 选取节点 表达式 描述 实例 介绍 nodename 选取nodename节点的所有子节点 xpath("//div") / 从根节点选取 xpath('/div') // 选取所有的当前节点,不考虑位置 xpath("//div") . 选取当前节点 xpath(‘./div’) 选取当前节点下的div节点 .. 选取当前节点的父节点 xpath(‘..’) 回到上一个节点 @ 选取属性 xpath(’//@calss’) 选取所有的class
谢伟
2018/06/06
1.8K0
油猴脚本重写fetch和xhr请求
写过几个油猴脚本,经常对页面请求返回的数据进行拦截或者覆盖,这篇文章就做个总结,涉及到 fetch 和 xhr 两种类型的请求。
windliang
2022/09/27
3.8K0
油猴脚本重写fetch和xhr请求
Java 根据XPATH批量替换XML节点中的值
根据XPATH批量替换XML节点中的值 by: 授客 测试环境 JDK 1.8.0_25 代码实操 message.xml文件 <Request service="SALE_ORDER_SERVICE" lang="zh-CN"> <Head> <AccessCode>xxxxxxxxxx12Ur8v6qkYAaOf</AccessCode> <Checkword>xxxxxxxxxxkmPif7Z35UEJjrR</Checkword> </Head>
授客
2022/09/28
2.2K0
RE(正则)和Xpath
正则表达式 re匹配中文:[u4e00-u9fa5] 是一个计算机科学的概念 用于使用单个字符串来描述,匹配符合某个规则的字符串 常常用来检索,替换某些模式的文本 正则的语法 .(点号)表示任意一个字
曼路
2019/05/26
1.4K0
hadoop3.0搭建本地模式和伪分布模式
将jdk和hadoop的压缩包放在服务器的/root/myhadoop 目录下,解压
用户1409099
2019/05/14
1.3K0
Python 关于xpath查找XML元素的一点总结
xpath = ".//xmlns:return//xmlns:copeWith"
授客
2019/09/11
2K0
JavaWeb——XML入门详解(概述、语法、约束、Jsoup解析、Xpath解析)
XML,Extensible Markup Language可扩展标记语言(也是由w3c(万维网联盟)推出的)。可扩展,标签都是自定义的,如<uesr>、<student>。其主要功能就是存储数据,用于配置文件使用,另外存储的数据可以在网络中传输。
Winter_world
2020/09/25
1.2K0
JavaWeb——XML入门详解(概述、语法、约束、Jsoup解析、Xpath解析)
R语言数据抓取实战——RCurl+XML组合与XPath解析
经常有小伙伴儿跟我咨询,在使用R语言做网络数据抓取时,遇到空值和缺失值或者不存在的值,应该怎么办。 因为我们大多数场合从网络抓取的数据都是关系型的,需要字段和记录一一对应,但是html文档的结构千差万别,代码纷繁复杂,很难保证提取出来的数据开始就是严格的关系型,需要做大量的缺失值、不存在内容的判断。 如果原始数据是关系型的,但是你抓取来的是乱序的字段,记录无法一一对应,那么这些数据通常价值不大,今天我以一个小案例(跟昨天案例相同)来演示,如何在网页遍历、循环嵌套中设置逻辑判断,适时的给缺失值、不存在值填充预
数据小磨坊
2018/04/11
2.5K0
R语言数据抓取实战——RCurl+XML组合与XPath解析
认识XPath(确定XML文档中某部分位置的语言)
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
wuweixiang
2018/09/13
1K0
深入理解xhr的responseType中blob和arrayBuffer
版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/details/78232485
空空云
2018/09/27
3.2K0
点击加载更多

相似问题

XHR未加载XML本地文件

14

理解跨域XHR和XML数据

20

XPath和XML修改

20

XPath命令不返回任何- XML模式。

10

如何XHR本地文件?

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档