带有选项值的节点序列

时间:2010-01-11 22:01:36

标签: xpath xpathdocument

这是关于重复节点和缺失值的问题。

鉴于下面的xml是否有一种方法在XPath中返回(value2,null,value5)而不是(value2,value5)?我正在使用一个看起来像的表达式:

/nodes/node[*]/value2/text()

检索值。我需要知道有一个值丢失,以及发生了哪些索引。我是XPath的完全新手,无法弄清楚如何做到这一点。

<nodes>
  <node>
    <value1>value1</value1>
    <value2>value2</value2>
  </node>
  <node>
    <value1>value3</value1>
  </node>
  <node>
    <value1>value4</value1>
    <value2>value5</value2>
  </node>
</nodes>

亲切的问候,

mipper

2 个答案:

答案 0 :(得分:1)

我怀疑你需要与xml解析器建立友好关系并自己迭代节点。这个例子在Ruby中;我用评论装饰它,因为我不知道你能读什么语言。

#!/usr/bin/ruby1.8

require 'nokogiri'

xml = <<EOS
<nodes>
  <node>
    <value1>value1</value1>
    <value2>value2</value2>
  </node>
  <node>
    <value1>value3</value1>
  </node>
  <node>
    <value1>value4</value1>
    <value2>value5</value2>
  </node>
</nodes>
EOS

# Parse the xml with Nokogiri
doc = Nokogiri::XML(xml)

# Get an array of nodes
nodes = doc.xpath('/nodes/node')

# For each node, get its value.  Put the collected values into the
# "values" array.
values = nodes.collect do |node|
  node.at_xpath('value2/text()').to_s
end

# Print the values in a programmer-friendly format
p values     # => ["value2", "", "value5"]

答案 1 :(得分:0)

  

鉴于下面的xml,在返回的XPath中有一种方法(value2,null,value5)

在XPath中,没有。 XPath只能选择/返回现有的节点。它不知道null。

在XSLT或任何其他XML感知编程语言中,问题可以通过迭代来解决。

<xsl:for-each select="/nodes/node">
  <xsl:value-of select="*[2]" />
  <xsl:text>, </xsl:text>
</xsl:for-each>