Последовательность узлов со значениями параметров - PullRequest
0 голосов
/ 12 января 2010

Вот вопрос о повторяющихся узлах и пропущенных значениях.

Учитывая приведенный ниже xml, есть ли способ в XPath вернуть (значение2, ноль, значение5) вместо (значение2, значение5)? Я использую выражение, которое выглядит так:

/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 ]

1 голос
/ 12 января 2010

Я подозреваю, что вам нужно подружиться с вашим 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"]
0 голосов
/ 12 января 2010

Учитывая приведенный ниже 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>
...