0

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

鉴于下面的 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>

亲切的问候,

米珀

4

2 回答 2

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"]
于 2010-01-12T04:24:03.580 回答
0

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

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

在 XSLT 或任何其他支持 XML 的编程语言中,这个问题可以通过迭代来解决。

<xsl:for-each select="/nodes/node">
  <xsl:value-of select="*[2]" />
  <xsl:text>, </xsl:text>
</xsl:for-each>
于 2010-01-12T10:03:14.267 回答