2011-11-10 8 views
0

これまでの「question」のアドバイスを使用して、私が望む結果を得ることができました。Nokogiri in RailsビューでXMLノードを表示

Railsビューにこれらの結果を表示する簡単な方法があれば、XML以外のコンテンツも表示されるのだろうかと思っていました。

私はXSLTを調べましたが、特に、Railsとは関係なく、それが私の時間を費やすべきかどうかを知るには十分ではありません。もしそうなら、私はXSLTをRailsビューでどのように使うことができるかについてのいくつかの指針を愛しています。私が探しています何

は「sdnEntry」の結果(詳細については、「XML Schema」を参照。)

のリストを表示することで、あなたは「XML Schema」ではなく、「sdnEntry」すべてのアイテムから見るように同じ要素を持っている。したがって、各 'sdnEntry'に関する以下の情報を表示したい場合は、空の要素を省略してください。

コメントでご質問ください。私は本当に助けに感謝します。

EDIT#1:XMLファイルはhereです。 (6MB)

EDIT#2:<dl>/<dt><dd>のようなものが好きです。ヘック、私は平凡な古いテーブルのために解決するだろう。空の要素については、スキーマから、 'firstName'や 'address3'などの子要素の中に最小出現回数が0であるため、 'sdnEntry'ごとに見つからないものがあります。可能であれば、空の子要素を表示しないでください。それが問題ならば、必要に応じて最後に空白を入れても問題ありません。

EDIT#3:結果は、常に1つ以上の 'sdnEntry'項目のNokogiri NodeSetになります。それは私が表示する必要があるすべてです。私は、十分な指針またはサンプルコードで、提供されたソリューションを他のニーズに適用することができると確信しています。

+1

'[この画像](http://www.kirupa.com/net/images/xml_doc2.gif)のような形式ですか?もしそうなら、シンタックスカラーリングは重要ですか?あるいは、XMLから情報を抽出して、それをきれいな形式(例えば、 '

/
'リストのカスタムラベルとフォーマット)として表示することを意味しましたか?その場合は、一般的なソリューション(XMLスニペット)や、特定の結果に合わせたものが必要でしたか? – Phrogz

+1

あなたの隣の段落で何を意味するのか分かりません、_ "それぞれの 'sdnEntry'" _について次の情報を表示したいと思います。表示したい特定の要素のリストを提供するつもりでしたか?または、特定の子要素がない場合でも(たとえば、''が法的に省略されている場合)でも、出力に空の要素を含めたいと思っていますか? – Phrogz

+1

希望の出力を提供するのを忘れてしまった(私は、XML文書が提供されたリンクによっていくらか指し示されていることを願っています)。 –

答えて

3

私はあなたに良い答えを与えるために実際に何が望まれているかについて十分な詳細をまだ教えていませんが、にはの回答が得られます。 :p

XMLファイルをNokogiriドキュメントにロードする方法、Railsビューの一部であるHamlテンプレートを作成する方法、Erbやその他のテンプレートシステムを使用している場合はそう言います) sdnEntryのリストを実行し、すべてのXMLを完全に素朴な巨大なダンプを実行します。特定のノードが必要な場合は、そうする必要があります。

require 'nokogiri' 
require 'haml' 

# Haml helper to create a naive hierarchy of dl/dt/dd for any xml node 
def xml_to_dl(node) 
    haml_tag('dl') do 
    node.elements.each do |n| 
     haml_tag('dt',n.name) 
     if n.elements.empty? 
     haml_tag('dd',n.text) 
     else 
     haml_tag('dd'){ xml_to_dl(n) } 
     end 
    end 
    end 
end 

# This would be your page.haml view 
template = Haml::Engine.new <<'ENDHAML' 
%section#sdnList 
    %h1#sdnList SDN List Awesomeness 
    - if @sdns.empty? 
    %p.error No entries found. :(
    - else 
    %p Here are some exciting sdnEntries. Check em out! 
    - @sdns.each do |sdn| 
     %h2.name #{sdn.at('lastName').text}, #{sdn.at('firstName').text} 
     - xml_to_dl(sdn) 
ENDHAML 

# This would be in your controller 
doc = Nokogiri.XML(IO.read('sdn.xml')) 
doc.remove_namespaces! # Make life easier 
@sdns = doc.xpath('/sdnList/sdnEntry[firstName][position() < 2]') 

# This is taken care of by rails 
puts template.render(self) 

そしてここでは、特定のテンプレートを作成することを出力です:あなたは、あなたが「きれいに生のXMLを表示することを意味しています「を表示Railsの中に、これらの結果を表示する」と言う

<section id='sdnList'> 
    <h1 id='sdnList'>SDN List Awesomeness</h1> 
    <p>Here are some exciting sdnEntries. Check em out!</p> 
    <h2 class='name'>GONZALEZ BOHORQUEZ, Guillermo</h2> 
    <dl> 
    <dt>uid</dt> 
    <dd>11764</dd> 
    <dt>firstName</dt> 
    <dd>Guillermo</dd> 
    <dt>lastName</dt> 
    <dd>GONZALEZ BOHORQUEZ</dd> 
    <dt>sdnType</dt> 
    <dd>Individual</dd> 
    <dt>programList</dt> 
    <dd> 
     <dl> 
     <dt>program</dt> 
     <dd>SDNT</dd> 
     </dl> 
    </dd> 
    <dt>idList</dt> 
    <dd> 
     <dl> 
     <dt>id</dt> 
     <dd> 
      <dl> 
      <dt>uid</dt> 
      <dd>6139</dd> 
      <dt>idType</dt> 
      <dd>Cedula No.</dd> 
      <dt>idNumber</dt> 
      <dd>6185654</dd> 
      <dt>idCountry</dt> 
      <dd>Colombia</dd> 
      </dl> 
     </dd> 
     <dt>id</dt> 
     <dd> 
      <dl> 
      <dt>uid</dt> 
      <dd>6140</dd> 
      <dt>idType</dt> 
      <dd>Passport</dd> 
      <dt>idNumber</dt> 
      <dd>AJ772175</dd> 
      <dt>idCountry</dt> 
      <dd>Colombia</dd> 
      </dl> 
     </dd> 
     </dl> 
    </dd> 
    <dt>addressList</dt> 
    <dd> 
     <dl> 
     <dt>address</dt> 
     <dd> 
      <dl> 
      <dt>uid</dt> 
      <dd>17790</dd> 
      <dt>address1</dt> 
      <dd>c/o UNIVISA S.A.</dd> 
      <dt>city</dt> 
      <dd>Cali</dd> 
      <dt>country</dt> 
      <dd>Colombia</dd> 
      </dl> 
     </dd> 
     </dl> 
    </dd> 
    <dt>dateOfBirthList</dt> 
    <dd> 
     <dl> 
     <dt>dateOfBirthItem</dt> 
     <dd> 
      <dl> 
      <dt>uid</dt> 
      <dd>7272</dd> 
      <dt>dateOfBirth</dt> 
      <dd>20 Dec 1944</dd> 
      <dt>mainEntry</dt> 
      <dd>true</dd> 
      </dl> 
     </dd> 
     </dl> 
    </dd> 
    <dt>placeOfBirthList</dt> 
    <dd> 
     <dl> 
     <dt>placeOfBirthItem</dt> 
     <dd> 
      <dl> 
      <dt>uid</dt> 
      <dd>7273</dd> 
      <dt>placeOfBirth</dt> 
      <dd>Buga, Valle, Colombia</dd> 
      <dt>mainEntry</dt> 
      <dd>true</dd> 
      </dl> 
     </dd> 
     </dl> 
    </dd> 
    </dl> 
</section> 
+0

私の知識が不足しているということは、あなたが望むような形で質問に答えることができたような形で質問していないことを意味します。それは残りのものを整理するのに十分な情報を私に与えました。そしてそのために、私はあなたに感謝します。 – GreenPlastik

+0

@GreenPlastik素晴らしい! :) – Phrogz

関連する問題