2016-09-05 3 views
1

Ich bin neu in xslt, also bitte gehen Sie einfach auf mich. Ich habe ein XML so.XSLT: Erstellen und speichern Sie eine Karte in XSLT

<?xml version="1.0" encoding="UTF-8"?> 
    <?xml-stylesheet type="text/xsl" version="1.0"?> 
    <process> 
    <groups> 
     <group id="sid-17d5a8eaba5e4313bd4958e74f25d3df" name="GroupA"> 
      <person-ref>sid-446515B9-2247-4657-A612-4693825B1ACF</person-ref> 
      <person-ref>sid-A57CAAA3-5FBA-4E8B-B530-A69571FDDF9A</person-ref> 
      <person-ref>sid-CFEC4F6D-2614-4887-90DE-9FE13AE44091</person-ref> 
     </group> 
     <group id="sid-d9dc88f7077046e9825e87c349d75909" name="GroupB"> 
      <person-ref>sid-BE136A0A-3A44-4C4A-B661-6F606D64AA94</person-ref> 
      <person-ref>sid-E9C5B00D-BF64-4560-96E4-EE111CC98AB4</person-ref> 
      <person-ref>sid-B2217776-D570-43A7-8110-A11026389EE5</person-ref> 
     </group> 
    </groups> 

    <persons> 
     <person id="sid-446515B9-2247-4657-A612-4693825B1ACF"/> 
     <person id="sid-B2217776-D570-43A7-8110-A11026389EE5"/> 
    </persons> 
    </process> 

Was ich liebe die entsprechende Gruppe von jeder Person zu erreichen, wird immer, so etwas wie diese:

<persons> 
    <person id="sid-446515B9-2247-4657-A612-4693825B1ACF"> 
     <Link name="GroupA" targetId="sid-17d5a8eaba5e4313bd4958e74f25d3df" /> 
    </person> 
    <person id="sid-B2217776-D570-43A7-8110-A11026389EE5"> 
     <Link name="GroupB" targetId="sid-d9dc88f7077046e9825e87c349d75909" /> 
    </person> 
    </persons> 

Mein Ansatz ist es, eine Karte der Gruppen zu erstellen und sie dann global speichern. Ich habe bereits einige Recherchen im Internet durchgeführt, aber xslt scheint es sehr schwer für uns zu machen, Karten zu erstellen.

+0

Das ist kein XML: ''. –

Antwort

1

Meine Vorgehensweise besteht darin, eine Karte der Gruppen zu erstellen und sie dann global zu speichern.

Ich bin nicht sicher, was Sie mit dem bevorzugte Ansatz hier ein key wäre die Verwendung Daten zum Nachschlagen von der entsprechenden Gruppe „eine Karte der Gruppen erstellen und dann global speichern.“:

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:key name="my-group" match="group" use="person-ref" /> 

<xsl:template match="/process"> 
    <persons> 
     <xsl:for-each select="persons/person"> 
      <xsl:variable name="group" select="key('my-group', @id)" /> 
      <person id="{id}"> 
       <Link name="{$group/@name}" targetId="{$group/@id}" /> 
      </person> 
     </xsl:for-each> 
    </persons> 
</xsl:template> 

</xsl:stylesheet> 
-1

versuchen diese

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" /> 
    <xsl:key name="my-group" match="group" use="person-ref" /> 
    <xsl:template match="/process/groups"> 
     <persons> 
      <xsl:for-each select = "group/person-ref"> 
       <xsl:variable name="ref" select="." /> 
       <xsl:variable name="group" select="key('my-group', $ref)" /> 
       <person id="{$ref}"> 
        <Link name="{$group/@name}" targetId="{$group/@id}" /> 
       </person> 
      </xsl:for-each> 
     </persons> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Warum postest du das? Es produziert nicht die angeforderte Ausgabe. –

+0

Hmm .. ich denke es tut. Siehe da http://online-toolz.com/tools/xslt-transformation.php –

+0

Ich weiß es nicht, weil ich es ausgeführt habe. –