打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
php – 如何编辑我的代码以回显在XMLReader中找到我的搜索词的子元素的数据?

我是XMLReader的新手,我觉得很难找到教程/代码或者先进的东西来获取示例.
我的问题是我如何转换现在的代码,所以如果我搜索(通过表单),jQuery这个术语将让我有机会输出< info>< / info>的值.每个< name>< / name>中的(以及后来的其他元素)那是在?

这是输出书籍名称的代码.

<?php$reader = new XMLReader();$reader->open("books.xml");while ($reader->read()) {   switch ($reader->nodeType) {   case (XMLREADER::ELEMENT):                  if ($reader->localName == "name") {                     $reader->read();                     echo $reader->value;                     break;                  }}}?>

xml文件

<?xml version="1.0" encoding="ISO-8859-1"?><library>    <book isbn="781">        <name>SCJP 1.5</name>        <info>Sun Certified Java Programmer book</info>    </book>    <book isbn="194">        <name>jQuery is Awesome!</name>        <info>jQuery Reference Book</info>    </book>     <book isbn="199">        <name>jQuery 101</name>        <info>All you need to know about jQuery</info>    </book> </library>

解决方法:

如果您已经绑定到XMLReader进行顺序解析,那么您可以基于它构建一些解析器.

简化解析操作的一种方法是将其封装到迭代器中,尤其是在处理序列时.例如,使用名为XMLBookIterator的迭代器,您可以在解析数据时覆盖所有书籍:

$books = new XMLBookIterator($file);foreach($books as $key => $book){    echo 'book (', $key, '):', "\n";    print_r($book);}

结果可能与您的示例数据一样:

book (0):stdClass Object(    [isbn] => 781    [name] => SCJP 1.5    [info] => Sun Certified Java Programmer book)book (1):stdClass Object(    [isbn] => 194    [name] => jQuery is Awesome!    [info] => jQuery Reference Book)book (2):stdClass Object(    [isbn] => 199    [name] => jQuery 101    [info] => All you need to know about jQuery)

然后,它只会根据您的条款过滤书籍.这可以实现到FilterIterator中,我们称之为BookFilterIterator:

$filtered = new BookFilterIterator($books, 'jQuery');foreach($filtered as $key => $book){    echo 'book (', $key, '):', "\n";    print_r($book);}

然后输出将减少到匹配的书籍:

book (1):stdClass Object(    [isbn] => 194    [name] => jQuery is Awesome!    [info] => jQuery Reference Book)book (2):stdClass Object(    [isbn] => 199    [name] => jQuery 101    [info] => All you need to know about jQuery)

唯一剩下的就是执行此操作的实际代码.它有点长,在它的核心 – 迭代器中的next()函数,你会发现一个基于状态的解析器正在读取你已经在问题中开始的XML.不同之处在于,它具有某种状态,有助于填充当前的书籍条目,该条目存储为该类的私人成员.

Code,Demo

演示代码使用XML作为字符串,然后通过$file =’data:// text / plain; base64,’.base64_encode($xml);将其转换为伪“文件”.迭代器适用于任何文件名,它只是传递给XMLReader,因此对于大数据,请使用文件.

来源:https://www.icode9.com/content-1-475501.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
PHP 5 XMLReader: Reading XML with Namespace (...
php 解析xml 的四种方法(转)
php教程 php设计模式介绍之代理模式
学习PHP弱引用的知识
(5)C#中常用的几种读取XML文件的方法
php警告Creating default object from empty value 问题的解决方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服