1

2 つの XML ファイルがあります。1 つ目は次のとおりです。

<a>
  <b>
    <c1>1</c1>
  </b>
  <b>
    <c1>2</c1>
  </b>
  <b "id" = "true">
    <c1>3</c1>
    <d "do" ="me"></d>
  </b>
  <b id ="true">
    <c1>4</c1>
  </b>
</a>

2 つ目は次のとおりです。

<a>
  <b>
    <c1>5</c1>
  </b>
</a>

first.xml から要素を更新したい:

<b "id" = "true">
  <c1>3</c1>
  <d "do" ="me"></d>
</b>

second.xml の要素を使用:

<b>
<c1>5</c1>
</b>

<b>first.xml からすべてのノードを削除し、 <b>second.xml ファイルから取得したノードを追加することで、それを達成しようとしました。すべてのノードを削除<b>できますが、second.xml から要素を取得して first.xml に追加することはできません。

4

2 に答える 2

3

ソース XML をクリーンアップした後、これが探しているもののようです。

xml1 = <<EOT
<a>
  <b>
    <c1>1</c1>
  </b>
  <b>
    <c1>2</c1>
  </b>
  <b id="true">
    <c1>3</c1>
    <d do="me"></d>
  </b>
  <b id="true">
    <c1>4</c1>
  </b>
</a>
EOT

xml2 = <<EOT
<a>
  <b>
    <c1>5</c1>
  </b>
</a>
EOT

require 'nokogiri'

doc1 = Nokogiri::XML(xml1)
doc2 = Nokogiri::XML(xml2)

doc1_b = doc1.at('//b[@id="true"]/c1/..')
doc2_b = doc2.at('b')

doc1_b.replace(doc2_b)

puts doc1.to_html

どの出力:

<a>
  <b>
    <c1>1</c1>
  </b>
  <b>
    <c1>2</c1>
  </b>
  <b>
    <c1>5</c1>
  </b>
  <b id="true">
    <c1>4</c1>
  </b>
</a>

doc1.at('//b[@id="true"]/c1/..')'「子ノードbを持つタグの最初の出現を見つける」ことを意味します。id="true"c1

于 2011-06-21T00:41:45.883 に答える
0

オプション //b[@id="true" および d/@do="me"]

上記の答えで私の質問に答えます

于 2011-06-21T19:24:51.603 に答える