2017-03-10 5 views
1

ich meine Ausgabe drucken möchten mit einem Newline trennen, so dass ich versucht:Wie Newline innerhalb concat von xmlstarlet

xmlstarlet sel -t -m "//node01" -v 'concat(@title,"\n",script/code)' -n input.xml 

jedoch, was gedruckt wird, ist das „\ n“ wörtliche Wert und der Ausgang ist auf gleiche Linie. Wie erzwinge ich einen Newline innerhalb der concat() - Funktion?

Eine Probe input.xml ist:

<test> 
<aaa>This is a test</aaa> 
<node01 title="howdy"> 
    <script> 
     <code>function idoit() { 
       console.log("hello world"); 
      } 
     </code> 
    </script> 
</node01> 
</test> 

Und wenn ich laufe, ist der Ausgang:

howdy\nfunction idoit() { 
       console.log("hello world"); 
      } 
+0

Was passiert, wenn Sie 'concat versuchen (@title," ", Skript/Code)'? Ist es nicht so, dass xmlstarlet etwas XSLT aus Ihrer Eingabe erstellt, wo dann vielleicht die Zeichenreferenz funktioniert? –

+0

Hallo Martin, netter Tipp, aber ich habe versucht, es funktioniert nicht. – ifelsemonkey

Antwort

1

Sie können eine wörtliche Newline in dem Argument geben, ist die Syntax für diese Schale -Spezifisch.

  • Dies sollte sh in jedem POSIX arbeiten:

    xmlstarlet sel -t -m "//node01" -v 'concat(@title," 
    ",script/code)' -n input.xml 
    
  • In bash, können Sie $'ANSI C Quoting':

    xmlstarlet sel -t -m "//node01" -v $'concat(@title,"\n",script/code)' -n input.xml 
    

Ein weiterer Trick, der nicht Shell-spezifisch ist, um eine XPATH-Variable mit newline als Wert festzulegen:

xmlstarlet sel -t --var nl -n -b -m "//node01" -v 'concat(@title,$nl,script/code)' -n input.xml 
+0

Danke npostavs. – ifelsemonkey