【发布时间】:2011-07-23 19:13:17
【问题描述】:
以这个语法为例
$xpath = 新 DOMXPath($dom); $nodes = $xpath->query('//text()');我在哪里可以找到一些解释它的官方 php/xpath 文档?
【问题讨论】:
-
好问题,+1。请参阅我的答案以获得广泛的解释和唯一官方来源的链接。
以这个语法为例
$xpath = 新 DOMXPath($dom); $nodes = $xpath->query('//text()');我在哪里可以找到一些解释它的官方 php/xpath 文档?
【问题讨论】:
官方规范见official w3 site。 text() 记录在 here。简而言之,文本节点是包含文本的任何节点,与包含脚本或 CSS 的节点不同。
这组 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,这是一种定义文本类型的方法,但对于我们而言,它仍然是文本。
【讨论】:
这是一个很好的 xpath 1.0 教程
【讨论】:
我在哪里可以找到一些官方 解释它的 php/xpath 文档?
符号:
text()
是 node test 中定义的 node test,这是唯一的官方 XPath 1.0 定义。
特别是,规范说:
“节点测试 text() 对任何文本节点都为真”。
"text node" 是 XPath 数据模型中七种不同类型的节点之一。
【讨论】: