staging.inyokaproject.org

Bestimmten Abschnitt aus einem File in ein anderes Kopieren

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

KNafets

Anmeldungsdatum:
22. Januar 2019

Beiträge: Zähle...

Hi zusammen,

wahrscheinlich ist mein Problem nicht so schwer zu lösen, nur komm ich grade einfach nicht zu einer verwendbaren Lösung.

Hier mein Problem: Ich habe ein 1.XML File in dem sich die selben ausdrücke immer wiederholen mit unterschiedlichen TextIds. Diese will ich nun in eine andere 2.XML einfügen. Hier der aufbau:

<attribute-value>

<VariableString mdib:textId="151586" mdib:context="D0" />

</attribute-value>

Dieser wiederholt sich ca. 50 mal in der Datei, ich will alle 50 mit der nachfolgenden Struktur in 2.XML kopieren:

<TextIdSpec>

<TextIdSpecEntry>

<TextId>151586</TextId>

</TextIdSpecEntry>

</TextIdSpec>

Habt ihr eine Idee wie ich das lösen kann?

Zusätzlich will ich dann in einer anderen Datei nach den TextIds suchen um ein passendes Kommentar daraus zu kopieren und oben in 2.XML ins Kommentarfeld einzufügen.

Gruß und vielen dank für euere Unterstützung KNafets

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Ahoi,

klingt nach XSLT. Das wäre jedenfalls das, was ich verwenden würde, wenn ich sauber eine XML-Datei in eine andere überführen wollen würde. (In Ausnahmefällen kannst du dein Glück bei sowas auch mit den klassischen Unix-Tools wie sed probieren. Funktioniert oft, kann aber auch nach hinten losgehen. Kommt immer auf deinen Fall an.)

Ich mutmaße mal, dass deine komplette XML-Datei irgendwie so aussieht – falls nicht, dann komplettes Beispiel posten. ☺

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<attribute-value xmlns:mdib="http://ich/weiss/es/nicht">
    <VariableString mdib:textId="151586" mdib:context="D0" />
    <VariableString mdib:textId="151596" mdib:context="D0" />
    <VariableString mdib:textId="151605" mdib:context="D0" />
    <VariableString mdib:textId="151628" mdib:context="D0" />
    <VariableString mdib:textId="151668" mdib:context="D0" />
    <VariableString mdib:textId="151800" mdib:context="D0" />
    <VariableString mdib:textId="151886" mdib:context="D0" />
    <VariableString mdib:textId="152820" mdib:context="D0" />
</attribute-value>

Dann kann man folgende Transformation draufwerfen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<unbekannt xsl:version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:mdib="http://ich/weiss/es/nicht"
>
    <xsl:for-each select="//VariableString">
        <TextIdSpec>
            <TextIdSpecEntry>
                <TextId>
                    <xsl:value-of select="@mdib:textId"/>
                </TextId>
            </TextIdSpecEntry>
        </TextIdSpec>
    </xsl:for-each>
</unbekannt>

Ergebnis:

$ xml tr trans.xslt data.xml | xmllint --format -
<?xml version="1.0"?>
<unbekannt xmlns:mdib="http://ich/weiss/es/nicht">
  <TextIdSpec>
    <TextIdSpecEntry>
      <TextId>151586</TextId>
    </TextIdSpecEntry>
  </TextIdSpec>
  <TextIdSpec>
    <TextIdSpecEntry>
      <TextId>151596</TextId>
    </TextIdSpecEntry>
  </TextIdSpec>
  <TextIdSpec>
    <TextIdSpecEntry>
      <TextId>151605</TextId>
    </TextIdSpecEntry>
  </TextIdSpec>
  <TextIdSpec>
    <TextIdSpecEntry>
      <TextId>151628</TextId>
    </TextIdSpecEntry>
  </TextIdSpec>
  <TextIdSpec>
    <TextIdSpecEntry>
      <TextId>151668</TextId>
    </TextIdSpecEntry>
  </TextIdSpec>
  <TextIdSpec>
    <TextIdSpecEntry>
      <TextId>151800</TextId>
    </TextIdSpecEntry>
  </TextIdSpec>
  <TextIdSpec>
    <TextIdSpecEntry>
      <TextId>151886</TextId>
    </TextIdSpecEntry>
  </TextIdSpec>
  <TextIdSpec>
    <TextIdSpecEntry>
      <TextId>152820</TextId>
    </TextIdSpecEntry>
  </TextIdSpec>
</unbekannt> 

Deine zweite Frage habe ich noch nicht so ganz begriffen. Du scheinst aber auch wieder XML nach XML transformieren zu wollen, also könnte man wieder XSLT benutzen.

Antworten |