Announcement

Collapse
No announcement yet.

XPath: Prüfen ob String-Array bestimmten String enthält

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XPath: Prüfen ob String-Array bestimmten String enthält

    Ich stehe mal wieder vor einem Problem, das sich einfach anhört, aber für mich trotz langem Googeln nicht zu lösen ist.

    In einer XML-Datei soll das "Attribut1" (String) von "Element1" nur bestimmte Werte annehmen dürfen.

    Dazu werden die Werte in einer zweiten XML-Datei wie folgt definiert:

    Code:
    <ROOT>
        <valuedef>
            <name>WertA</name>
        </valuedef>
    
        <valuedef>
            <name>WertB</name>
        </valuedef>
    
    </ROOT>
    Mittels Schematron soll jetzt überprüft werden, ob "Attribut1" überall einen der definierten Werte enthält.

    Mit
    Code:
    document('wertdefinitionen.xml')/ROOT/valuedef/name/text()
    werden die Werte in die Schematrondatei eingelesen. Die habe ich jetzt dort als String-Array und kann sie auch in eine Variable packen.

    Ich definierte für "Element1" eine Regel:

    Code:
    <pattern>        
    <rule context="Element1">
     <assert test="./@Attribut1???"> 
      Das Attribut darf nur einen definierten Wert enthalten.
     </assert>
     </rule>
    </pattern>
    Soweit so gut.

    Aber welchen XPath-Ausdrucke schreibe ich bei "test" hin, damit dort überprüft wird, ob derjenige "Attribut1"-Wert, der gerade zu überprüfen ist, auch tatsächlich erlaubt/definiert ist?

  • #2
    Probiere es so:

    [highlight=xml]<rule context="Element1">
    <let name="werte" value="document('wertdefinitionen.xml')/ROOT/valuedef/name/text()"/>
    <assert test="index-of($werte, @Attribut1) gt 0">
    Das Attribut darf nur einen definierten Wert enthalten.
    </assert>
    </rule>[/highlight]

    BTW: $werte ist eine Sequenz in der Form ('WertA','WertB').
    Zuletzt editiert von Thomas Meinike; 24.09.2013, 11:38.

    Comment


    • #3
      Vielen Dank!

      Funktioniert! (Und wäre ich selbst nie darauf gekommen.)

      ...und vielleicht finde ich auch mal raus, wo der Unterschied zwischen sequence und array ist.

      Comment

      Working...
      X