2016-04-26 14 views
0

Nokogiri::XML::Nodeの属性を印刷するネイティブメソッドがあるかどうかは、innerHTMLまたはテキストの内容がわからないことがあります。所与例えばNokogiri :: XML :: Nodeの属性をinnerHTMLなしで印刷する

Nokogiri::XML::Node

<div id="customer" class="highlighted"> 
    <h1>Customer Name</h1> 
    <p>Some customer description</p> 
</div> 

Iのみ印刷したい:

<div id="customer" class="highlighted"> 

又は

<div id="customer" class="highlighted"/> 

又は

<div id="customer" class="highlighted"></div> 

attributesメソッドを使用して属性のリストをループすることができますが、Nokogiriが既にネイティブにこのようなものをサポートしているかどうかは疑問でした。

+0

はSOへようこそ。 「[mcve]」と「[ask]」をお読みください。この問題を解決するために書いた最小限のコードと、それがなぜあなたが望むことをしていないのか説明したいのですが、それがなければ、あなたにコードを書くことが望ましいようです。 Nokogiriをスタックオーバーフローで使用する例はたくさんありますが、そのほとんどはノードへのアクセス方法を示します。そこから、ノードの内容を削除してHTMLとして印刷することになります。 –

+0

@theTinManのコメントありがとうございましたが、あなたの記事の前にあなたが書いた指示を読んだので、投稿したコードが完成しました。私は質問をする前に多くのことを試していましたが、それらの質問をすべて不必要に長くし混乱させることはないと言って、同じ問題を解決しようとする他の人にとっては役に立たなくなりました。 – Vadim

答えて

0

あなたは可能性が出力にその内容を削除してノード:

doc = Nokogiri::HTML.fragment(
    '<div id="customer" class="highlighted"> 
    <h1>Customer Name</h1> 
    <p>Some customer description</p> 
    </div>' 
) 

node = doc.at_css('#customer').clone 
node.content = nil 
p node.to_html 
#=> "<div id=\"customer\" class=\"highlighted\"></div>" 
+0

これは実際にはかなり賢いです。私は 'node.content = nil'を使用してしまいました。元のHTMLフラグメントを破棄しても問題ではなかったので、要素をクローンして余分なオーバーヘッドを追加したくないからです。小さなノードの場合、このオーバーヘッドは非常に小さくなります。ありがとうございます! – Vadim

関連する問題