Ich habe eine XML-Datei wie:xmlstarlet: Abfragen und verschachtelte untergeordnete Elemente mit einer einzigen Abfrage verketten
<?xml version="1.0" encoding="utf-8"?>
<project>
<data>
<modelType type="InstantMessage">
<model type="InstantMessage" id="1" >
<modelField name="From" type="Party">
<model type="Party" id="123456">
<field name="Identifier" type="String">
<value type="String">foo</value>
</field>
</model>
</modelField>
<multiModelField name="To" type="Party" />
<field name="Body" type="String">
<value type="String">bar</value>
</field>
<field name="TimeStamp" type="TimeStamp">
<value type="TimeStamp">2016-07-11 13:26:38+02:00</value>
</field>
</model>
</modelType>
</data>
ich mit einer einzigen Abfrage folgendem Ergebnis erzeugen will:
foo|bar
Ich weiß nicht, wie Sie auf diese Felder zugreifen, wenn sie in verschiedenen Ebenen verschachtelt sind. Ich habe versucht, etwas wie:
[email protected]:/.../# xmlstarlet sel -T -t -m /project/data/modelType/model -v "concat(/modelField/model/field/value'|'/field[@Body]/value)" file.xml
, aber ich habe permanent Syntaxfehler von Xmlstarlet. Ich verstehe nicht, wie man es von der manual verwendet. Kann jemand in diesem Fall xmlstarlet verwenden?
Danke, Peter
Große Erklärung !! – user3586330
Das ist so eine tolle Antwort! Die einzige Sache ist, gibt es 2 fehlende Anführungszeichen nach '-m' und' [@ name = "Bezeichner"]/Wert' hier ist es mit den Anführungszeichen hinzugefügt 'xmlstarlet sel-T \ -t -m '/ project/data/modelType/model '\ -v' .//field[@name="Identifier"]/value '\ -o' | ' \ -v './/field[@name="Body"]/value' \ file.xml' – jarisky
@jarisky: Danke für das Korrekturlesen. Fest. – rici