2016-04-26 3 views
0

Weiß jemand, ob es eine native Methode zum Drucken der Attribute eines Nokogiri::XML::Node ohne innerHTML oder Textinhalt gibt.Attribute von Nokogiri drucken :: XML :: Nur Knoten, ohne innerHTML

Zum Beispiel angesichts der folgenden Nokogiri::XML::Node:

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

Ich möchte nur drucken:

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

oder

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

oder

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

Ich weiß, ich könnte einfach durch die Liste der Attribute mit der attributes Methode durchlaufen, aber ich frage mich, ob Nokogiri bereits so etwas nativ unterstützt.

+0

Willkommen bei SO. Bitte lesen Sie "[mcve]" und "[ask]". Wir würden gerne den minimalen Code sehen, den Sie geschrieben haben, um dies zu lösen, zusammen mit einer Erklärung, warum es nicht das tut, was Sie wollen. Ohne dass es so aussieht, als wollten Sie, dass wir den Code für Sie schreiben. Es gibt viele Beispiele für die Verwendung von Nokogiri in Stack Overflow, und die meisten davon zeigen, wie man auf einen Knoten zugreift. Von dort geht es darum, den Inhalt des Knotens zu entfernen und als HTML zu drucken. –

+0

Danke für den Kommentar, @theTinMan, aber ich habe die Anweisungen gelesen, die Sie vor Ihrer Post vor langer Zeit zitiert haben, und der Code, den ich gepostet habe, war vollständig. Ich hatte viele verschiedene Dinge ausprobiert, bevor ich die Frage gestellt hatte, und hätte ich sie alle gepostet, hätte das meine Frage nicht unnötig lang und verwirrend gemacht, sie hätte es auch viel weniger hilfreich für andere Leute gemacht, die dasselbe Problem lösen wollten. – Vadim

Antwort

0

Sie könnten Ausgang der Knoten mit seinem Inhalt gelöscht:

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

Das ist eigentlich ziemlich clever. Am Ende habe ich 'node.content = nil' verwendet, weil es für mich keine Rolle spielte, ob ich das ursprüngliche HTML-Fragment zerstört habe, und ich wollte keinen zusätzlichen Overhead durch Klonen des Elements hinzufügen, aber Ihr Code macht den Job, und für kleine Knoten wäre dieser Overhead ziemlich klein. Danke mein Herr! – Vadim