这是关于重复节点和缺失值的问题。
鉴于下面的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
答案 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>