【问题标题】:Where can I found some official documentation for text() xpath query syntax?我在哪里可以找到一些有关 text() xpath 查询语法的官方文档?
【发布时间】:2011-07-23 19:13:17
【问题描述】:

以这个语法为例

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

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

【问题讨论】:

  • 好问题,+1。请参阅我的答案以获得广泛的解释和唯一官方来源的链接。

标签: php xpath


【解决方案1】:

官方规范见official w3 sitetext() 记录在 here。简而言之,文本节点是包含文本的任何节点,与包含脚本或 CSS 的节点不同。

【讨论】:

  • 文本节点herehere也有“官方”定义。但更重要的是,text() 是一个节点测试
【解决方案2】:

这组 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。

您可以看到出现在相应&lt;style&gt;&lt;script&gt; 标记内的CSS 和Javascript 也将是text() 节点。它们被视为 CDATA,这是一种定义文本类型的方法,但对于我们而言,它仍然是文本。

【讨论】:

    【解决方案3】:

    这是一个很好的 xpath 1.0 教程

    http://www.zvon.org/xxl/XPathTutorial/General/examples.html

    【讨论】:

      【解决方案4】:

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

      符号:

      text()
      

      node test 中定义的 node test,这是唯一的官方 XPath 1.0 定义。

      特别是,规范说:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-29
        • 1970-01-01
        • 1970-01-01
        • 2020-08-15
        • 1970-01-01
        • 2019-09-04
        • 2023-03-26
        • 1970-01-01
        相关资源
        最近更新 更多