2017-03-26 5 views
0

Ich versuche, eine Webseite zu erstellen, die Benutzereingaben eine XML-Datei durchsuchen kann. Es gibt mehrere Eingänge, aber ich habe Probleme mit leeren Eingaben, wenn die Suche gesendet wird.Alle Elemente standardmäßig mit xsl: beim Test zurückgeben?

var date = rDateSearch.value; 
if (date === "") {   
    var datein = "date=*"; 
} 
else { 
    var datein = "date=" + date"; 
} 

Die Variable 'Datum' wird dann an einen xsl:when Test gesendet. Ich möchte die xsl:when alle Datumswerte zurückgeben.

Gibt es eine Möglichkeit, dies zu tun? Meine derzeitigen Ideen funktionieren nicht.

Dies ist ein Beispiel meiner xml:

<record> 
    <name>John Smith</name> 
    <date>1972</date> 
    <rating>0.5</rating> 
</record> 

und das ist mein xsl. Ich bin mir nicht sicher, ob dieser Code geeignet ist.

<xsl:for-each select="records/record"> 
    <xsl:choose> 
     <xsl:when test ="name=*"> 
      <xsl:choose> 
       <xsl:when test ="date=*"> 
        <xsl:choose> 
         <xsl:when test ="rating=*"> 
          <tr> 
           <td><xsl:value-of select="name"/></td> 
           <td><xsl:value-of select="date"/></td> 
           <td><xsl:value-of select="rating"/></td> 
          </tr> 
         </xsl:when> 
        </xsl:choose> 
       </xsl:when> 
      </xsl:choose> 
     </xsl:when> 
    </xsl:choose> 
</xsl:for-each> 
+0

Es wäre hilfreich, wenn Sie die XSL gepostet haben, um anzuzeigen, welcher Kontext vorliegt, wenn Ihre 'xsl: choose' angewendet wird. Auch hilfreich zu wissen, wie das XML aussieht. Ohne etwas darüber zu wissen, wie Sie das anwenden, was ist mit einem Ausdruck, der 'true()' zurückgibt, wenn es keinen Wert für 'date' gibt, so dass alles die @test-Kriterien für Ihr' xsl: when' erfüllt? –

+0

Vielen Dank für Ihre Hilfe, ich habe Proben wie gewünscht hinzugefügt. – grainman

+0

Also, konstruieren Sie dynamisch Ihre XSLT, ersetzen Sie das, was der Variablen "datein" zugewiesen wird, wo Sie derzeit 'xsl: wenn test =" date = * "'? –

Antwort

2

Wenn der Benutzer angegeben hat keinen Wert, den Namen, das Datum oder Bewertung zu filtern, und Sie versuchen, was Ausdruck jeder würde wählen, um herauszufinden,/alle, können Sie entweder verwenden:

xsl:when test="date" 

die den Test "bestehen", solange ein date Element im record Element in der xsl:for-each ausgewertet wird.

Alternativ könnten Sie verwenden:

xsl:when test="true()" 

, die als wahr beurteilen würde, ob es ist ein Datum, Element.

Die gleiche Logik gilt für die anderen Elemente.

+0

Vielen Dank für Ihre Hilfe! – grainman

Verwandte Themen