0

これは、繰り返されるノードと欠損値に関する質問です。

以下の xml を考えると、XPath で (value2, value5) ではなく (value2, null, 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 は既存のノードのみを選択/返すことができます。null はわかりません。

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 に答える