Wie schreibe ich ein XSLT, um das folgende XML in das folgende HTML umzuwandeln?

StackOverflow https://stackoverflow.com/questions/2565109

  •  23-09-2019
  •  | 
  •  

Frage

<result>  
   <binding name="PropertyURI">
      <uri>http://dbpedia.org/ontology/motto</uri>
   </binding> 
   <binding name="Property">
      <literal xml:lang="en">motto</literal>
   </binding>
   <binding name="ValueURI">
      <uri>http://dbpedia.org/ontology/motto</uri>
   </binding>
   <binding name="Value">
      <literal>Ittehad, Tanzim, Yaqeen-e-Muhkam(Urdu)</literal>
   </binding>
</result>

Ich möchte es gerne umwandeln

<a href=PropertyURI>Property</a>
<a href=ValueURI>Value</a>

Das Problem besteht darin, dass die Anzahl der Bindungs-Tags unterschiedlich sein kann.Manchmal haben wir möglicherweise nur URIs oder nur Werte.

Wie kann ich in XSLT wissen, ob eine Bindung mit @name=PropertyURI verfügbar ist?
Wenn ja, wie lautet dann der Name des nächsten Bindungsattributs @name?

War es hilfreich?

Lösung

Es gibt bereits eine Antwort, die gültig zu sein scheint, aber ich habe gerade 10 Minuten damit verbracht, den folgenden Code zu testen:

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <xsl:apply-templates select="/result/binding[@name='PropertyURI']"/>
</xsl:template>
  <xsl:template match="binding">
    <a>
      <xsl:attribute name="href">
        <xsl:value-of select="./uri"/>
      </xsl:attribute>
      <xsl:value-of select="./following-sibling::binding[1][@name='Property']/literal"/>
    </a>
  </xsl:template>
</xsl:stylesheet> 

Andere Tipps

Es ist nicht ganz klar, wonach Sie suchen, da Ihre Beschreibung des Problems und Ihr gewünschtes Ergebnis nicht miteinander in Zusammenhang zu stehen scheinen.ICH denken Das, was Sie tun möchten, ist, alles zu finden binding Element mit a uri Kind, finde das Verwandte binding Element, das ein hat literal Kind, und verwenden Sie die uri Und literal Werte zum Auffüllen eines a Element.

Diese Vorlage geht davon aus, dass die beiden binding Elemente hängen zusammen, weil die name Attribut auf dem mit dem uri Kind beginnt mit dem name Attribut auf dem mit dem literal Kind, z.B.„PropertyURI“ beginnt mit „Property“ und „ValueURI“ beginnt mit „Value“:

<xsl:template match="binding[uri]">
   <xsl:variable name="name" value="@name"/>
   <xsl:variable name="literal" 
                select="/result/binding[starts-with($name, @name)]/literal"/>
   <xsl:if test="$literal">
      <a href="{uri}">
         <xsl:value-of select="$literal"/>
      </a>
   </xsl:if>
</xsl:template>

Wenn das zugehörige Element einfach das ist nächste binding Element nach dem mit dem uri Kind, verwenden Sie die obige Vorlage und ersetzen Sie die Variablenzuweisung durch:

<xsl:variable name="literal" select="following-sibling::binding[1]/literal"/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top