我在哪里可以找到text()xpath查询语法的官方文档?

时间:2011-03-27 07:34:17

标签: php xpath

以此语法为例

$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//text()');

我在哪里可以找到解释它的官方php / xpath文档?

4 个答案:

答案 0 :(得分:2)

  

我在哪里可以找到一些官员   解释它的php / xpath docs?

符号:

text()

node test 中定义的 W3C XPath 1.0 specification ,这是唯一正式的XPath 1.0定义。

特别是,规范说:

“节点测试 text()对于任何文本节点都是”。

"text node “是XPath数据模型中七种不同类型的节点之一。

答案 1 :(得分:1)

官方规范见于official w3 site。记录text() {{1}}。简而言之,文本节点是包含文本的任何节点,与包含脚本或CSS的节点不同。

答案 2 :(得分:0)

这组XPath示例可能有所帮助。他们使用Ruby,因为这是我最喜欢的语言,但重要的是输出。

require 'nokogiri' # load the parser

xml1 =<<EOT
<xml><node1>test1 text</node1></xml>
EOT

doc = Nokogiri::XML(xml1)      # parse the first XML sample
nodes = doc.search('//text()') # find the text() nodes

# inspect the nodes...
nodes # => [#<Nokogiri::XML::Text:0x8054a508 "test1 text">]

# display the nodes' content as text
puts nodes
# >> test1 text

xml2 =<<EOT
<xml>
  <node1>test1 text</node1>
</xml>
EOT

doc = Nokogiri::XML(xml2)
nodes = doc.search('//text()') 
nodes # => [#<Nokogiri::XML::Text:0x80549608 "\n  ">, #<Nokogiri::XML::Text:0x8054952c "test1 text">, #<Nokogiri::XML::Text:0x805493b0 "\n">]
puts nodes
# >> 
# >>   
# >> test1 text
# >> 

html =<<EOT
<html>
  <head>
    <script type="text/javascript"><!-- javascript --></script>
    <style type="text/css"><!-- style sheet --></style>
  </head>
  <body>
    text
    <p>p tag</p>
  </body>
</html>
EOT

doc = Nokogiri::HTML(html)
nodes = doc.search('//text()') 
nodes # => [#<Nokogiri::XML::CDATA:0x80548834 "<!-- javascript -->">, #<Nokogiri::XML::CDATA:0x80548730 "<!-- style sheet -->">, #<Nokogiri::XML::Text:0x805485a0 "\n    text\n    ">, #<Nokogiri::XML::Text:0x80548488 "p tag">, #<Nokogiri::XML::Text:0x8054830c "\n  ">]
puts nodes
# >> <!-- javascript -->
# >> <!-- style sheet -->
# >> 
# >>     text
# >>     
# >> p tag
# >> 
# >>   

如果将检查和打印输出与解析的XML和HTML进行比较,您可以看到每行标签和标签之间文本的相应文本节点 - 有时它们是空的,即仅“\ n” 。换句话说,文本节点是当标记在单独的行上时强制使用单独行的回车符,它们是标记之间出现的文本。这适用于XML和HTML。

您可以看到在相应的<style><script>标记内发生的CSS和Javascript也将是text()个节点。它们被视为CDATA,这是一种定义文本类型的方法,但出于我们的目的,它仍然是文本。

答案 3 :(得分:0)