Werte mit XPath vergleichen

sabine84

Grünschnabel
Hallo zusammen!

Ich habe folgendes Problem:

Ich möchte gern mit Hilfe von XPath Ausdrücken die Inhalte eines XML-Dokumentes in Schematron vergleichen. Nur leider bekomme ich das nicht so hin wie gewollt.

hier ein Ausschnitt aus dem XML:
XML:
<kbl:KBL_container>
   <External_reference>
       <Document_type='KAB'>
       <Change_level>300611</Change_level>
       <finishing>250811</finishing>
    </External_refernce>
   <Harness>
      <Change>
           <Change_date>110509</Change_date>
      </Change>
    </Harness>
</kbl:KBL_container>
Ich möchte nun die Werte aus <Change_level> und <Change_date> vergleichen. Sie sollen den gleichen Inhalt haben, d.h. sonst Fehlermeldung.

Wenn diese nicht überein stimmen kann ich mit Hilfe von Schematron eine Fehlermeldung ausgeben.
Ich habe es bis jetz leider nur geschafft die Elemente <Change_level> und <finishing> miteinander zu vergleichen.

meine bisherige Regel mit Schematron, die leider nicht funktioniert:
XML:
<pattern>
   <rule context="//External_refernce[Document_type='KAB'] | //Harness/Change">
        <assert test="Change_level=Change_date">
            Achtung! Änderungsstand stimmt nicht überein. 
        </assert>
    </rule>
</pattern>

Kann mir jemand helfen? ich habe schon vieles ausprobiert aber leider geht es nicht richtig.

Viele Grüße
 
Zuletzt bearbeitet von einem Moderator:
Hi.

Statt External_reference hast du External_refernce geschrieben.

Ansonsten passt dein Kontext ja nicht, da Change_level und Change_date nicht unterhalb des gleichen Elements vorkommen.

Ich würde es mal so probieren:
XML:
<pattern>
   <rule context="//kbl:KBL_container">
        <assert test="External_reference/Change_level=Harness/Change/Change_date">
            Achtung! Änderungsstand stimmt nicht überein. 
        </assert>
    </rule>
</pattern>

Gruß
 
Zuletzt bearbeitet von einem Moderator:
Hi!

Danke für die Antwort, allerdings funktioniert es leider noch nicht.

Das Dokument ist nach der Validierung immer noch gültig, obwohl es unterschiedliche Daten sind. Ich habe es auch mit <report> versucht, aber auch kein erfolg.

Es funktioniert aber wenn ich den Kontext //kbl:KBL_container/External_reference setze und darunter <Change_level> mit <finishing> vergleiche.

Es sollte doch auch funktionieren, wenn man den Kontext eine Ebene höher setzt?

Irgendwie steh ich da aufn Schlauch :(

Viele Grüße
 
Hi.

Das Problem ist gelöst.

Ich muss im Kontext External_reference auswählen, und dann assert auf das Elternelement weisen.

<rule context="//External_reference[Document_type='KAB']">
<assert test="Change_level=..//Change_date">

Viele Grüße
 

Neue Beiträge

Zurück