XML::DOM::XPath

28、XML 处理:从 XPath 查询到 DOM 操作的全面指南 本博客全面介绍了 XML 处理的相关知识,涵盖从基础的 XPath 查询到复杂的 DOM 操作。内容包括 XML 命名空间的使用、通过 XPath 进行元素匹配、RSS 订阅源解析、利用 SimpleXML 和 DOMDocument 生成和修改 XML 文档、处理 CDATA 和注释等。同时,还提供了 SimpleXML 与 DOMDocument 的对比分析以及 XML 处理的最佳实践,帮助开发者更高效地应对 XML 相关任务。 阅读详情

# $Id: XPath.pm,v 1.11 2005/10/18 08:39:04 mrodrigu Exp $

 

package XML::DOM::XPath;

 

use strict;

 

use XML::XPathEngine;

use XML::DOM;

 

use vars qw($VERSION);

$VERSION="0.13";

 

my $xp_field;     # the field in the document that contains the XML::XPathEngine object

my $parent_field; # the field in an attribute that contains the parent element

 

BEGIN

  { # this is probably quite wrong, I have to figure out the internal structure of nodes better

    $xp_field     = 11;

    $parent_field = 12;

  }

 

package XML::DOM::Document;

 

sub findnodes           { my( $dom, $path)= @_; return $dom->xp->findnodes(           $path, $dom); }

sub findnodes_as_string { my( $dom, $path)= @_; return $dom->xp->findnodes_as_string( $path, $dom); }

sub findvalue           { my( $dom, $path)= @_; return $dom->xp->findvalue(           $path, $dom); }

sub exists              { my( $dom, $path)= @_; return $dom->xp->exists(              $path, $dom); }

sub find                { my( $dom, $path)= @_; return $dom->xp->find(                $path, $dom); }

sub matches             { my( $dom, $path)= @_; return $dom->xp->matches( $dom, $path, $dom); }

sub set_namespace       { my $dom= shift; $dom->xp->set_namespace( @_); }

 

sub cmp { return $_[1]->isa( 'XML::DOM::Document') ? 0 : 1; }

 

sub getRootNode { return $_[0]; }

sub xp { return $_[0]->[$xp_field] }

 

{ no warnings;

  # copied from the original DOM package, with the addition of the creation of the XML::XPathEngine object

  sub new

    { my ($class) = @_;

      my $self = bless [], $class;

 

      # keep Doc pointer, even though getOwnerDocument returns undef

      $self->[_Doc] = $self;

      $self->[_C] = new XML::DOM::NodeList;

      $self->[$xp_field]= XML::XPathEngine->new();

      $self;

    }

}

 

package XML::DOM::Node;

 

sub findnodes           { my( $node, $path)= @_; return $node->xp->findnodes(           $path, $node); }

sub findnodes_as_string { my( $node, $path)= @_; return $node->xp->findnodes_as_string( $path, $node); }

sub findvalue           { my( $node, $path)= @_; return $node->xp->findvalue(           $path, $node); }

sub exists              { my( $node, $path)= @_; return $node->xp->exists(              $path, $node); }

sub find                { my( $node, $path)= @_; return $node->xp->find(                $path, $node); }

sub matches             { my( $node, $path)= @_; return $node->xp->matches( $node->getOwnerDocument, $path, $node); }

 

sub isCommentNode { 0 };

sub isPINode      { 0 };

 

sub to_number { return XML::XPathEngine::Number->new( shift->string_value); }

 

sub getParent   { return $_[0]->getParentNode; }

sub getRootNode { return $_[0]->getOwnerDocument; }

 

sub xp { return $_[0]->getOwnerDocument->xp; }

 

# this method exists in XML::DOM but it returns undef, while

# XML::XPathEngine needs it, but wants an array... bother!

# This method is actually redefined for XML::DOM::Element, but needs

# to be here for other types of nodes.

{ no warnings;

  sub getAttributes

    { if( caller(0)!~ m{^XML::XPathEngine}) { return undef; }                                    # XML::DOM

      else                                  { my @atts= (); return wantarray ? @atts : /@atts; } # XML::XPathEngine

    }

}

 

sub cmp

  { my( $a, $b)=@_;

 

    # easy cases

    return  0 if( $a == $b);   

    return -1 if( $a->isAncestor($b)); # a starts before b

    return  1 if( $b->isAncestor($a)); # a starts after b

 

    # special case for 2 attributes of the same element

    # order is dictionary order of the attribute names

    if( $a->isa( 'XML::DOM::Attr') && $b->isa( 'XML::DOM::Attr'))

      { if( $a->getParent == $b->getParent)

          { return $a->getName cmp $b->getName }

        else

          { return $a->getParent->cmp( $b->getParent); }

      }

 

    # ancestors does not include the element itself

    my @a_pile= ($a->ancestors_or_self);

    my @b_pile= ($b->ancestors_or_self);

 

    # the 2 elements are not in the same twig

    return undef unless( $a_pile[-1] == $b_pile[-1]);

 

    # find the first non common ancestors (they are siblings)

    my $a_anc= pop @a_pile;

    my $b_anc= pop @b_pile;

 

    while( $a_anc == $b_anc)

      { $a_anc= pop @a_pile;

        $b_anc= pop @b_pile;

      }

 

    # from there move left and right and figure out the order

    my( $a_prev, $a_next, $b_prev, $b_next)= ($a_anc, $a_anc, $b_anc, $b_anc);

    while()

      { $a_prev= $a_prev->getPreviousSibling || return( -1);

        return 1 if( $a_prev == $b_next);

        $a_next= $a_next->getNextSibling || return( 1);

        return -1 if( $a_next == $b_prev);

        $b_prev= $b_prev->getPreviousSibling || return( 1);

        return -1 if( $b_prev == $a_next);

        $b_next= $b_next->getNextSibling || return( -1);

        return 1 if( $b_next == $a_prev);

      }

  }

 

sub ancestors_or_self

  { my $node= shift;

    my @ancestors= ($node);

    while( $node= $node->getParent)

      { push @ancestors, $node; }

    return @ancestors;

  }

 

sub getNamespace

  { my $node= shift;

    my $prefix= shift() || $node->ns_prefix;

    if( my $expanded= $node->get_namespace( $prefix))

      { return XML::DOM::Namespace->new( $prefix, $expanded); }

    else

      { return XML::DOM::Namespace->new( $prefix, ''); }

  }

 

sub getLocalName

  { my $node= shift;

    (my $local= $node->getName)=~ s{^[^:]*:}{};

    return $local;

  }

 

sub ns_prefix

  { my $node= shift;

    if( $node->getName=~ m{^([^:]*):})

      { return $1; }

    else

      { return( '#default'); } # should it be '' ?

  }

 

BEGIN

  { my %DEFAULT_NS= ( xml   => "http://www.w3.org/XML/1998/namespace",

                      xmlns => "http://www.w3.org/2000/xmlns/",

                    );

 

    sub get_namespace

      { my $node= shift;

        my $prefix= defined $_[0] ? shift() : $node->ns_prefix;

        if( $prefix eq "#default") { $prefix=''}

        my $ns_att= $prefix ? "xmlns:$prefix" : "xmlns";

        my $expanded= $DEFAULT_NS{$prefix} || $node->inherit_att( $ns_att) || '';

        return $expanded;

      }

  }

 

sub inherit_att

  { my $node= shift;

    my $att= shift;

 

    do

      { if( ($node->getNodeType == ELEMENT_NODE) && ($node->getAttribute( $att)))

          { return $node->getAttribute( $att); }

      } while( $node= $node->getParentNode);

    return undef;

  }

 

package XML::DOM::Element;

 

sub getName { return $_[0]->getTagName; }

 

{ no warnings;

 

# this method exists in XML::DOM but it returns a NamedNodeMap object

# XML::XPathEngine needs it, but wants an array... bother!

sub getAttributes

  { # in any case we need $_[0]->[_A]  to be filled

    $_[0]->[_A] ||= XML::DOM::NamedNodeMap->new (Doc  => $_[0]->[_Doc], Parent  => $_[0]);

 

    if( caller(0)!~ m{^XML::XPathEngine})

      { # the original XML::DOM value

        return $_[0]->[_A];

      }

    else

      { # this is what XML::XPathEngine needs

        my $elt= shift;

        my @atts= grep { ref $_ eq 'XML::DOM::Attr' } values %{$elt->[1]};

        $_->[$parent_field]= $elt foreach (@atts);

        return wantarray ? @atts : /@atts;

      }

  }

 

}

 

# nearly straight from XML::XPathEngine

sub string_value

  { my $self = shift;

    my $string = '';

    foreach my $kid ($self->getChildNodes)

      { if ($kid->getNodeType == ELEMENT_NODE || $kid->getNodeType == TEXT_NODE)

          { $string .= $kid->string_value; }

      }

    return $string;

  }

 

 

 

package XML::DOM::Attr;

 

# needed for the sort

sub inherit_att { return $_[0]->getParent->inherit_att( @_); }

 

sub getParent    { return $_[0]->[$parent_field]; }

sub string_value { return $_[0]->getValue; }

sub getData      { return $_[0]->getValue; }

 

 

package XML::DOM::Text;

sub string_value { return $_[0]->getData; }

 

 

package XML::DOM::Comment;

sub isCommentNode { 1 };

sub string_value { return $_[0]->getData; }

 

 

package XML::DOM::ProcessingInstruction;

 

sub isPINode { 1 };

sub isProcessingInstructionNode { 1 };

sub string_value { return $_[0]->getData; }

sub value { return $_[0]->getData; }

 

 

package XML::DOM::Namespace;

 

sub new

  { my( $class, $prefix, $expanded)= @_;

    bless { prefix => $prefix, expanded => $expanded }, $class;

  }

 

sub isNamespaceNode { 1; }

 

sub getPrefix   { $_[0]->{prefix};   }

sub getExpanded { $_[0]->{expanded}; }

sub getValue    { $_[0]->{expanded}; }

sub getData     { $_[0]->{expanded}; }

 

 

1;

__END__

 

=head1 NAME

 

XML::DOM::XPath - Perl extension to add XPath support to XML::DOM, using XML::XPath engine

 

=head1 SYNOPSIS

 

  use XML::DOM::XPath;

 

  my $parser= XML::DOM::Parser->new();

  my $doc = $parser->parsefile ("file.xml");

 

  # print all HREF attributes of all CODEBASE elements

  # compare with the XML::DOM version to see how much easier it is to use

  my @nodes = $doc->findnodes( '//CODEBASE[@HREF]/@HREF');

  print $_->getValue, "/n" foreach (@nodes);

 

=head1 DESCRIPTION

 

XML::DOM::XPath allows you to use XML::XPath methods to query

a DOM. This is often much easier than relying only on getElementsByTagName.

 

It lets you use all of the XML::DOM methods.

 

=head1 METHODS

 

Those methods can be applied to a whole dom object or to a node.

 

=head2 findnodes($path)

 

return a list of nodes found by $path.

 

=head2 findnodes_as_string($path)

 

return the nodes found reproduced as XML. The result is not guaranteed

to be valid XML though.

 

=head2 findvalue($path)

 

return the concatenation of the text content of the result nodes

 

=head2 exists($path)

 

return true if the given path exists.

 

=head2 matches($path)

 

return true if the node matches the path.

 

 

=head1 SEE ALSO

 

  XML::DOM

 

  XML::XPathEngine

 

=head1 AUTHOR

 

Michel Rodriguez, mirod@cpan.org

 

=head1 COPYRIGHT AND LICENSE

 

Copyright 2003 by Michel Rodriguez

 

This library is free software; you can redistribute it and/or modify

it under the same terms as Perl itself.

 

=cut

Vercel静态站被墙别慌!手把手教你用Cloudflare免费CDN+域名解析搞定DNS污染 本文详细介绍了如何利用Cloudflare免费CDN和域名解析解决Vercel静态网站遭遇DNS污染的问题。通过诊断DNS污染、设计Cloudflare解决方案架构、实战配置步骤以及高级调优技巧,帮助用户快速恢复站点访问并提升防护能力。 阅读详情

相关推荐

AlphaFold-multimer实战:从零开始预测STAT1-STAT2蛋白复合物结构

本文详细介绍了使用AlphaFold-multimer从零开始预测STAT1-STAT2蛋白复合物结构的完整实战流程。内容涵盖环境配置、数据库准备、序列处理、参数优化及结果可信度评估,为研究者利用这一AI工具进行复合物结构预测提供了系统指南和深度解析。

weixin_29094301的博客 885

XML-DOM操作

Document Object Model的缩写使用 DOM 时,数据以类树结构被装入内存中。DOM 使用根节点和父子关系。DOM的三层模型将HTML、XML文档定义成树形结构。文档中的标签,属性,文本等都封装成了节点对象。封装成对象的好处就是更易于操作这些节点。DOM本身就是对外暴露的一套API。--------------------------------------------------...

想吃一口西多 904

Unity简单操作:PostProcessing的使用

Postprocessing是一个unity2018版本的集成后期插件,有了这个插件,之后用unity开发时,后期调整颜色、光晕等会很方便。 目录 新建一个postprocessing profile(配置文件)。​ 参数说明: 新建一个postprocessing profile(配置文件)。 在主相机下加一个组件PostProcess Layer。 注意:需要将相机的Layer层设置与Post Process Layer 下的Volume blending(体积混合)...

weixin_39114763的博客 7366

linux lxml源码安装,python库lxml在linux和WIN系统下的安装

lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数值、时...

weixin_32237603的博客 391

10bit SAR ADC电路:200多页设计与仿真文档,附gpdk045工艺与testbench,可直接导入Virtuoso仿真,含以太网、PLL电路例程及进阶ADC

拥有超过200页的详细设计和仿真文档,它以gpdk045工艺为基础,testbench均可直接导入virtuoso仿真,为我们提供了一个全面了解ADC电路设计的绝佳机会。通过对10bit SAR ADC电路的详细解析,我们不仅了解了其设计背后的原理和实现方法,还体会到了数字与模拟技术的交融之美。这个SAR ADC的结构采用了经典的电荷重分配架构。一个10bit SAR ADC电路,有200多页详细的设计和仿真文档,附带对应的gpdk045工艺,testbench都有,可直接导入virtuoso仿真。

OMyAVKmGPBOF的博客 1332

SAP SD POD 配置与 VLPOD 操作:3步解决发货10件开票7件的业务场景

本文详细解析了SAP SD POD功能在解决发货与开票数量差异中的应用,通过3步配置法实现精准匹配。重点介绍了POD核心逻辑、关键配置步骤及VLPOD操作技巧,帮助企业高效处理易损品运输等复杂场景,提升供应链管理效率。

weixin_30613343的博客 393

linux安装python xml文件操作,python的xml文件操作

python中xml的操作可以使用dom库、sax库、etree库(这个是新的)、parsers库。其中dom.minidom是dom轻量级模块,这里介绍dom.minidom和etree两个模块这里以UserInfo.xml文件为例,xml内容如下: xml解析>>>xmldoc=minidom.parse('UserInfo.xml')#itwillloada...

weixin_39607447的博客 365

hspice2016安装教程

试装系统:win10 64bit 安装包路径和安装路径最好都不要出现中文,一般选择默认安装在C盘。 1.解压安装包压缩文件。 2.以管理员身份运行hspice_vL-2016.03-2_win.exe。 3.点击“Next”。 4.选择“I accept”,然后点击“Next”。 5.点击“Next”。 6.一般默认安装路径即可,然后点击“Next”。 7.点击“Next”. 8.点击“Next”。 9.正...

谢谢关注“小鱼教你模数电”,各平台同号 1万+

[Perl]利用XML::DOM生成XML文档

Perl的XML::DOM功能很强大,利用它可以轻易地分析XML文档,也可以建立XML文档。常用的类包括:XML::DOM::Node:所有类的基类,表示一个XML节点。XML::DOM::Parser:XML解析器,将XML字符串解析成XML::DOM::Document对象。XML::DOM::Document:指向XML文档的根节点。XML::DOM::Element

Technology world 2014

多机器人协同:水下机器人集群的分布式控制与ROS仿真实践

本文探讨了多自主水下机器人(AUV)集群的分布式控制方法,重点分析了欠驱动6自由度AUV模型的反馈线性化技术。通过ROS/Gazebo仿真平台,详细介绍了系统架构设计、通信延迟补偿策略及环境扰动应对方案,为水下协同作业提供实用参考。

jupi8的博客 686

openclaw通俗入门系列9——流式传输 + 分块

流式传输 = 不等写完就开始发。分块流式传输是把长回复切成几条消息发(所有渠道),草稿流式传输是像打字一样实时显示(仅 Telegram)。可以配置块大小、发送时机、合并规则、类人延迟。

m0_60605453的博客 506

linux "perl(xml::dom)" rpm,linux - Error installing XML::DOM::XPath - Stack Overflow

I've written a small Perl script that uses the Bio::Seq and Bio::SeqIO packages. When I try to run the script on a linux-based server. I got a lot of errors which basically told me that BioPerl hadn't...

weixin_42298826的博客 407

搞懂 SAPUI5 Fiori 应用的 OData 授权维护:从 IWSG、IWSV 到 S_SERVICE 的完整实践

本文探讨了SAP Fiori项目中常见的授权问题及其解决方案。文章指出,开发人员常误将OData服务访问问题归咎于前端代码或配置,而实际上多因授权默认值未正确带入角色所致。详细分析了IWSG(前端服务组元数据)和IWSV(后端业务服务)两个关键对象的作用机制,强调应通过PFCG角色的Authorization Default入口维护服务对象,而非直接修改S_SERVICE授权对象。文章还提供了前后端授权配置的具体操作步骤,并特别提醒需同时配置前端和后端授权,才能确保应用完整可用性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 205

XML Parser:DOM + XPath

There are many kinds of XML Parsers in Java: DOM (JDK embedded DOM implementation) SAX JDOM (It is an alternative to DOM and SAX) Digester (Jakarta commons Digester) JAXB(OXM, JDK1.6 embedded JA...

u012780541的博客 231

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

XML实战详解:语法约束与PHP的DOM、XPath高级操作

XML技术解析与应用指南 本文系统介绍了XML技术的核心知识点与应用场景。首先对比了HTML的局限性,指出XML在数据分离、自定义标签和结构化存储方面的优势。XML广泛应用于程序间通讯、配置管理和小型数据库存储,如QQ数据传输、PHP数据库连接配置等。 详细讲解了XML语法规范,包括文档声明、元素、属性、注释等组成部分,并通过班级信息案例演示XML文档结构。重点阐述了DTD文档约束技术,说明如何通过DTD验证XML文件有效性。 在PHP操作XML方面,深入解析了DOM编程方法,实现XML数据的增删改查,并介

深耕计算机专业知识与技术。 747

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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可以识别该属性,ge...

weixin_29463345的博客 194

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java解析xml文件

java解析xml常用的4种方法(这4种可以解决开发中遇到的xml解析的所有问题) 结果: 第二种 dom4j解析 引入dom4j jar包 结果: 导入依赖 打印: 或者; 第四种 XPath解析网址请求返回的xml文件 接下来我们来解析一个可以查询手机号码相关信息的网址。 地址为(http://apis.juhe.cn/mobile/get?%20phone=16670002013&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253) 然后将解析这

啊猿的博客 1654

一文弄懂XML文件解析利器XPath

XPath 是一种为查询 XML 文档而设计的语言,它可以与 DOM 解析方式配合使用,实现对 XML 文档的解析。XPath 之于 XML 就好比 SQL 语言之于数据库。

死牛胖子的技术随笔 1265

Java生成和解析XML格式文件和字符串

1、基础知识: Java解析XML一般有四种方法:DOM、SAX、JDOM、DOM4J。 2、使用介绍 1)、DOM 由W3C(org.w3c.dom)提供的接口,它将整个XML文档读入内存,构建一个DOM树来对各个节点(Node)进行操作。优点就是整个文档都一直在内存中,我们可以随时访问任何节点,并且对树的遍历也是比较熟悉的操作;缺点则是耗内存,并且必须等到所有的文档都读入内存才能进行处

寒江蓑笠的专栏 1989

java xml解析jar包_使用Java解析XML

一.解析的对象小丁123小彭123二.解析的方法介绍1.DOM(docuement object model)解析把所有的XML内容读到内存中,形成树状结构。这个树状结构是一个对象,名字叫docuementDOM解析中的一些术语Doucment:整个对象(整颗数)Element:元素,就是标签,上面的users,user,username,password四个标签Attribute:属性,user...

weixin_32204175的博客 845

php xml 查找

/*******************dom操作xml*****************/ function xmlDom() { //实例化dom对象 $xmldoc=new DOMDocument(); //加载xml $xmldoc->load("demo.xml"); //获取根节点 $roots=$xmldoc->childNodes->item(0); //获取指定节点

liwateryi的专栏 401

xpath,sax,DOM解析xml文件(基础)

基础 XML解析器有二类,分别是DOM和SAX。 DOM DOM解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。 很方便对文档进行遍历 对文档curd也特别方便 xml文档比较大的时候,dom解析占用的内存也会比较大,浪费系统资源。所以dom解析这种方式不适合解析大的xml文档。 SAX 解析文件速度快,占用资源(内存)少。 sa...

zhou920786312的博客 1081

dom4jz之基础:XSL,XSLT,XPATH,XHTML,XML命名空间(网上搜集整理)

整理到一块,方便自己与大家查阅 XHTML 介绍 XHTML is a stricter and cleaner version of HTMLXHTML是更严密代码更整洁的HTML版本 .What Is XHTML?什么是XHTML?XHTML stands for EXtensible HyperText Markup LanguageXHTML是具有延伸性的超文本标记语言XHTML is a...

fishermen 269

浅谈XML

一、简介: XML全称:EXtensible Markup Language(可扩展标记语言)。 编写XML就是编写标签,与HTML非常相似。 扩展名是:.xml 具有良好的人机可读性。 二、XML和HTML比较: XML与HTML非常相似,都是编写标签。 XML没有预定义标签,而HTML存在大量预定义标签。 XML重在保存和传输数据,HTML用于显示信息。 三、XML的用途: 是Java的配置描述文件。 用于保存程序产生的数据。 用于网络间的数据传输。 四、XML的文档结构

qq_43542011的博客 841

Python爬虫学习:DOM操作器XPATH

标题

南淮北安的博客 3328

XML解析(SAX, DOM, JDOM, DOM4J)

1、面试题: 问: Java中有几种XML解析方式 ? 分别是什么 ? 有什么样的优缺点 ? 答: 四种. 1. SAX解析 解析方式是事件驱动机制 ! SAX解析器, 逐行读取XML文件解析 , 每当解析到一个标签的开始/结束/内容/属性时触发事件。我们可以编写程序在这些事件发生时, 进行相应的处理。 优点: 分析能够立即开始,而不是等待所有的数据被处理 逐行加载,节省内存。有助于解析大于系统内存的文档 有时不必解析整个文档,它可以在某个条件得到满足时停止解析。 缺点: 单向

哈哈哈哈哈哈哈哈的博客 306
上一篇: Bigdog
下一篇: 概率公式整理
mickeyfirst
博客等级 码龄25年 82粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值