php dom xml解析,简化PHP DOM XML解析-怎么做?

小编典典

解决问题1:

的W3C定义:

该属性的含义xml:id如在XML文档的ID属性定义处理该属性来识别在没有确认的ID的,没有获取的外部资源,并且不依赖于内部子集。

换句话说,当您使用

$element->setAttribute('xml:id', 'test');

您无需调用setIdAttribute,也无需指定DTD或Schema。与DOM一起xml:id使用时,DOM可以识别该属性,getElementById而无需验证文档或其他任何内容。这是最省力的方法。但是请注意,根据您的操作系统和libxml版本,您getElementById根本无法使用。

解决问题2:

即使无法使用来获取ID getElementById,您仍然可以使用XPath来获取它们:

$xpath->query('/pages/page[@id=1]');

肯定会工作。您还可以直接为特定页面获取产品子级:

$xpath->query('//pages/page[@id=1]/products');

除此之外,几乎没有什么可以使DOM代码看起来不太冗长,因为它确实是一个冗长的接口。由于DOM是语言不可知的接口,因此必须由W3C再次定义。

在下面的评论后编辑

就像我上面解释的那样。这是一个完整的测试用例。第一部分是使用DOM 编写

新的XML文件。那是您需要设置xml:id属性的地方。您可以使用它代替常规的非命名空间的id属性。

// Setup

$dom = new DOMDocument;

$dom->formatOutput = TRUE;

$dom->preserveWhiteSpace = FALSE;

$dom->loadXML('');

// How to set a valid id attribute when not using a DTD or Schema

$page1 = $dom->createElement('page');

$page1->setAttribute('xml:id', 'p1');

$page1->appendChild($dom->createElement('product', 'foo1'));

$page1->appendChild($dom->createElement('product', 'foo2'));

// How to set an ID attribute that requires a DTD or Schema when reloaded

$page2 = $dom->createElement('page');

$page2->setAttribute('id', 'p2');

$page2->setIdAttribute('id', TRUE);

$page2->appendChild($dom->createElement('product', 'bar1'));

$page2->appendChild($dom->createElement('product', 'bar2'));

// Appending pages and saving XML

$dom->documentElement->appendChild($page1);

$dom->documentElement->appendChild($page2);

$xml = $dom->saveXML();

unset($dom, $page1, $page2);

echo $xml;

这将创建一个XML文件,如下所示:

foo1

foo2

bar1

bar2

当您再次 读取

XML时,新的DOM实例不再知道您已使用声明了非命名空间id属性为ID属性setIdAttribute。它仍将保留在XML中,但id属性将只是常规属性。您必须注意,ID属性在XML中是特殊的。

// Load the XML we created above

$dom = new DOMDocument;

$dom->loadXML($xml);

现在进行一些测试:

echo "\n\n GETELEMENTBYID RETURNS ELEMENT WITH XML:ID \n\n";

foreach( $dom->getElementById('p1')->childNodes as $product) {

echo $product->nodeValue; // Will output foo1 and foo2 with whitespace

}

上面的方法有效,因为与DOM兼容的解析器必须识别xml:id出ID属性,而不管任何DTD或Schema。在上面链接的规范中对此进行了解释。它输出空白的原因是由于格式化输出,在开始标记,两个产品标记和结束标记之间存在DOMText节点,因此我们要遍历五个节点。节点概念对于理解使用XML至关重要。

echo "\n\n GETELEMENTBYID CANNOT FETCH NORMAL ID \n\n";

foreach( $dom->getElementById('p2')->childNodes as $product) {

echo $product->nodeValue; // Will output a NOTICE and a WARNING

}

上面的方法不起作用,因为id它不是ID属性。为了使DOM解析器能够识别出它,您需要DTD或Schema,并且必须针对它验证XML。

echo "\n\n XPATH CAN FETCH NORMAL ID \n\n";

$xPath = new DOMXPath($dom);

$page2 = $xPath->query('/pages/page[@id="p2"]')->item(0);

foreach( $page2->childNodes as $product) {

echo $product->nodeValue; // Will output bar1 and bar2

}

另一方面,XPath是关于属性的文字,这意味着您可以在DOM中查询具有属性的页面元素(id如果getElementById不可用)。请注意,要查询ID为p1的页面,您必须包含名称空间,例如@xml:id="p1"。

echo "\n\n XPATH CAN FETCH PRODUCTS FOR PAGE WITH ID \n\n";

$xPath = new DOMXPath($dom);

foreach( $xPath->query('/pages/page[@id="p2"]/product') as $product ) {

echo $product->nodeValue; // Will output bar1 and bar2 w\out whitespace

}

就像说的那样,您还可以使用XPath查询文档中的其他任何内容。这个不会输出空格,因为它只会返回productID为p2的页面下方的元素。

您还可以从节点遍历整个DOM。这是一个树状结构。由于DOMNode是DOM中最重要的类,因此您需要熟悉它。

echo "\n\n TRAVERSING UP AND DOWN \n\n";

$product = $dom->getElementsByTagName('product')->item(2);

echo $product->tagName; // 'product'

echo $dom->saveXML($product); // 'bar1'

// Going from bar1 to foo1

$product = $product->parentNode // Page Node

->parentNode // Pages Node

->childNodes->item(1) // Page p1

->childNodes->item(1); // 1st Product

echo $product->nodeValue; // 'foo1'

// from foo1 to foo2 it is two(!) nodes because the XML is formatted

echo $product->nextSibling->nodeName; // '#text' with whitespace and linebreak

echo $product->nextSibling->nextSibling->nodeName; // 'product'

echo $product->nextSibling->nextSibling->nodeValue; // 'foo2'

在一个旁注中,是的,我在上面的原始代码中确实有一个错字。这是product不是products。但是我发现当您只需要更改一个代码时,声称该代码不起作用几乎是没有道理的s。那简直太像想被喂饱了。

2020-05-26

JavaScript与PHP交互处理XML数据经典案例 htmltable {th, td {th {pre {简介:本案例涉及网页动态交互、数据处理及用户界面美化。通过PHP读取XML数据后,使用JavaScript进行数据处理与展示。PHP利用DOMDocument和SimpleXMLElement类解析XML,而JavaScript通过AJAX技术获取数据,并利用DOM操作将其展示在网页上。此外,还展示了如何使用jQuery简化操作和提升用户交互体验。 阅读详情

相关推荐

php解析html类库simple_html_dom(详细介绍)

一直以来使用php解析html文档树都是一个难题。Simple HTML DOM parser 帮我们很好地解决了这个问题。可以通过这个php类来解析html文档,对其中的html元素进行操作 (PHP5+以上版本)

PHP——爬虫DOM解析

php在爬取网页信息的时候,有一些函数可以使用。示例:比如获取一个html文档中的p标签。

R_Nelson的专栏 978

<Verilog实现除法器> Verilog实现牛顿-拉夫逊(Newton-Raphson)除法器

阿斯顿阿斯顿啊啊是打发士大夫

IC跳跳鱼的博客 3586

php解析html dom节点树

不得不感叹用DOM直接解析HTML DOM树的灵活和强大,因为基本的HTML元素就是那么几种常见的,再加上ID属性或者CLASS属性之类的。。 在解析html文件时,完全可以用正则中脱离出来,毕竟HTML文件中存在大量相似的模式,而且代码看上去功能比较显而易见,当然正则是非常强大的,应用的领域也更广。。 代码如下: <?php //关闭载入包含js时的警告提示 err

Free_Program_1314的专栏 5851

H3C无线控制器AC与第三方认证系统集成实现企业级Portal短信认证方案

本文详细阐述了如何将H3C无线控制器(AC)与第三方认证系统集成,构建企业级Portal短信认证方案。该方案通过手机号作为临时凭证,实现了访客网络的实名追溯、权限控制与专业体验。文章深入解析了方案原理、H3C AC的关键配置步骤、第三方系统对接要点及短信网关选型避坑指南,为企业提升网络安全管理与访客服务质量提供了完整、可行的实战指导。

a3b4c5的博客 194

Ubuntu虚拟机磁盘扩容实战:5分钟搞定gparted分区调整(附常见错误修复)

本文详细介绍了在Ubuntu虚拟机中使用gparted工具进行磁盘扩容的实战步骤。针对常见的交换分区阻碍问题,提供了从禁用交换空间、删除旧分区、调整主分区大小到重建交换分区并更新系统配置的完整解决方案,帮助用户在5-10分钟内安全高效地解决磁盘空间不足的难题。

1a2s3d4f5g的博客 670

用PHP来操作DOM(一)

从事PHP开发很多年了,也写过些小项目,经常要在后台生成前端输出的HTML脚本,说白了就是把HTML语言以字符串的方式嵌入在PHP的输入语句中,单纯的输出没什么问题,但遇到DOM修改时很是麻烦,要做各种查找与替换,还要写一大堆正则,反反复复,效率极低。也用过网上的一些PHP操作DOM的开源项目,不过问题多多,要么就停更很久了,要么不完善,我在写代码这个问题上是个不将就的人,所以,就自己想整一个这么...

zxmatline的博客 3458

MAX96712在车载摄像头系统中的带宽分配与传输能力计算解析

在计算摄像头带宽与传输接口的关系时,需要考虑视频流的像素分辨率、帧率、颜色深度等因素。以 MAX96712 这种 GMSL2 产品为例,它支持每个链路在正向方向以 3Gbps 或 6Gbps 的固定速率工作。

weixin_43199439的博客 3328

PHP XML DOM

PHP XML DOM 是 PHP 中用于处理 XML 文档的内置 DOM 解析器。DOM(Document Object Model)是一种标准的对象模型,将 XML 文档表示为树状结构,允许我们访问和操作各个节点,如元素、属性和文本。PHP XML DOM 是 PHP 中内置的 DOM 解析器,基于 W3C DOM 标准,用于处理 XML 文档。DOM(Document Object Model)是一种树状结构模型,将 XML 文档表示为节点集合,每个节点可以是元素、属性、文本或其他类型。

m0_57545130的博客 823

【占用网络】OccNet: Scene as Occupancy 适用于检测、分割和规划任务 ICCV2023

本文分享“占用网络”方案中,具有代表性的方法:OccNet。它以多视角视觉为核心,首先生成BEV特征,然后通过级联结构和时间体素解码器重建生成3D占用特征。构建一个通用的“3D占用编码特征”,用以表示3D物理世界。这样的特征描述可以应用于广泛的自动驾驶任务,包括检测、分割和规划。

黎国溥 3361

2025目标检测新方向:弱监督目标检测的最新论文研究与应用

2025目标检测新方向:弱监督目标检测的最新论文研究与应用 ,人工智能,计算机视觉,大模型,AI,本文聚焦2025年弱监督目标检测新方向,阐述其基础概念,包括弱监督学习定义、标注形式及面临的定位不准等挑战。介绍最新论文研究的多种算法,如基于点标注的算法等,还涉及相关模型、应用领域,以及评价指标、数据集、实现工具框架,分析未来趋势与补充挑战及解决方案,为该领域研究提供全面参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 7万+

php dom xml解析,简化PHP DOM XML解析 - 如何?

Gordon..12解决问题1:的W3C定义:该属性的含义xml:id如在XML文档的ID属性定义该属性的处理以识别的ID不存在的验证,而无需获取的外部资源,并且不依赖于内部子集.换句话说,当你使用时$element->setAttribute('xml:id', 'test');您不需要调用setIdAttribute,也不需要指定DTD或Schema.DOM将xml:id在使用时识别该属...

weixin_29092579的博客 197

静态编译Qt5源码(Kylin-Desktop-V10-SP1-2203-LoongArch64+qt5.15.16)

之前的文档,记录的是通用情况,本次笔者记录下Qt5的静态编译过程,供有需要的小伙伴参考使用的操作系统是Kylin-Desktop-V10-SP1-General-Release-2203-LoongArch64,处理器是龙芯3A5000,架构是loongarch。

aggs1990的专栏 1402

「PHP系列」PHP DOM扩展库/SimpleXML 解析XML文档

DOM (Document Object Model) 是一种编程接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM 将文档(如 HTML 或 XML)解析为一个由节点(如元素节点、属性节点、文本节点等)和对象组成的结构集合,这些节点和对象可以通过一系列属性和方法进行访问和修改。结构:DOM 将文档解析为一个树形结构,其中每个节点都是一个对象。这个树形结构被称为 DOM 树。节点类型:DOM 定义了多种节点类型,包括元素节点(如等)、属性节点、文本节点、注释节点等。

日常笔记/总结/系列知识梳理 1142

UniApp 覆盖安装后首次进入 APP pages.json 不生效的解决方案

通过以上步骤,解决了缓存问题导致的首次加载异常。此方案的关键在于强制更新文件名,从根本上避免旧缓存的干扰。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 683

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

fDOMDocument:扩展标准DOM功能,简化开发流程

fDOMDocument:扩展标准DOM功能,简化开发流程 项目介绍 fDOMDocument 是一个 PHP 扩展库,它基于 PHP 的标准 DOM 类,提供了一系列的扩展方法和异常处理机制。这个项目的主要目的是为了简化使用 DOM 的过程,同时通过使用异常而非 PHP 的警告或通知来提升错误处理的效率和代码的可读性。 项目技术分析 fDOMDocument 项目的核心是扩展 PHP 的 DOM...

gitblog_00731的博客 875

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

PHP之认识PHP(五)XML

1、Expat解析器 1.1、XML是什么? XML 用于描述数据,其焦点是数据是什么。XML 文件描述了数据的结构。 在 XML 中,没有预定义的标签。您必须定义自己的标签。 1.2、Expat是什么? 如需读取和更新 - 创建和处理 - 一个 XML 文档,您需要 XML 解析器。 有两种基本的 XML 解析器类型: 基于树的解析器:这种解析器把 XML 文档转换为树型结构。它分...

qq_41166992的博客 231

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

PHP XML

PHP XML PHP XML Expat 解析器 内建的 Expat 解析器使在 PHP 中处理 XML 文档成为可能。 什么是 XML? XML 用于描述数据,其焦点是数据是什么。XML 文件描述了数据的结构。 在 XML 中,没有预定义的标签。您必须定义自己的标签。 如果希望学习更多有关 XML 的内容,请访问我们的 XML 教程。 什么是 Expat? 如需读取和更...

iteye_8614的博客 248

php simple_xml,PHPSimpleXML_PHP教程

与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从元素中读取文本数据。SimpleXML 可把 XML 文档转换为对象,比如:元素 - 被转换为 SimpleXMLElement 对象的单一属性。当同一级别上存在多个元素时,它们会被置于数组中。属性 - 通过使用关联数组进行访问,其中的下标对应属性名称。元素数据 - 来自元素的文本数据被转换为字符串。如果一个元素拥有...

weixin_31286719的博客 186

php经典实例-笔记6-xml

1、通过DOM生成XML 通过DOM扩展来创建一个DOMDocument对象,在建立了文档后,调用DOMDocument::svae()或DOMDocument::saveXML()方法生成一个格式良好的XML文档。 遵循的模式就是:创建一个元素或者文本节点对象,添加或设置想要的属性,然后添加到所属的位置上。 $dom = new DOMDocument('1.0','UTF-8'); $

心无所属的专栏 846

推荐开源项目:PHP XML文档解析器

推荐开源项目:PHP XML文档解析器 在处理XML数据时,我们常常需要编写复杂的逻辑来将数据转换为易于操作的数组。然而,现在有一个框架无关的PHP包——Laravie Parser XML Document Parser,它提供了一种简单的方法,无需复杂代码即可轻松完成XML到数组的转换。 1、项目介绍 Laravie Parser是一款轻量级的XML解析组件,其核心目标是简化XML数据的处理流...

gitblog_00082的博客 458

PHP 5 SimpleXML 函数

PHP 5 SimpleXML 函数

T0620514的博客 237

php simplehttp,PHP SimpleXML

PHPSimpleXMLPHP SimpleXML 处理最普通的 XML 任务,其余的任务则交由其它扩展处理。什么是 PHP SimpleXML?SimpleXML 是 PHP 5 中的新特性。SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据。SimpleXM...

weixin_29451671的博客 116

php xpath 网页,网页爬虫-请问PHP怎么使用xpath解析html内容呢?

在网上查看了很多相关资料,但都是PHP用xpath解析xml的,请问PHP有没有相关的函数或是类库能解析html吗?谢谢回复内容:在网上查看了很多相关资料,但都是PHP用xpath解析xml的,请问PHP有没有相关的函数或是类库能解析html吗?谢谢直接用zend-dom吧,方便多了!http://framework.zend.com/manual/2.3/en/modules/zend.dom....

weixin_30781567的博客 251

php 采集网页 webfont,phpQuery采集网页内容的示例代码

本节内容:phpQuery实现采集网页内容的代码说明:phpQuery是一个基于PHP的服务端开源项目,它可以让PHP开发人员轻松处理DOM文档内容,比如获取某新闻网站的头条信息。它采用了jquery的思想,可以像使用jQuery一样处理页面内容,获取想要的页面信息。1,采集头条采集新浪网国内新闻的头条:复制代码 代码示例:include 'phpQuery/phpQuery.php';phpQu...

weixin_29295541的博客 156
上一篇: php实现微信支付接口,php 微信支付接口类(微信支付服务器端下单)
下一篇: java创建者模式做借书,Java创建者模式
风神有理
博客等级 码龄10年 20粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值