2010-10-21 4 views
0

J'ai quelques * .xml avec des éléments tels que:copie XSLT sans xsl: copy-of

<app-method name="leave-accrual-status-details" kind="enquiry"> 
    <title>...</title> 
    <required-roles> 
     <role name="authenticated"/> 
    </required-roles> 
    <asd> 
     <param name="..." datatype="dt:int" control="hidden" call-kind="..." data-kind="..."/> 
    </asd> 
    <data-engine sp="spLeaveAccrualStatusDetails"> 
    ... 
    </data-engine> 
    <wia> 
    ... 
    </wia> 
    </app-method> 

et la création de nouvelles .xml-documents (en sélectionnant uniquement les éléments "app-méthode") .Je « m le faire de cette façon: ( .xsl)

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
    <xsl:output method="xml" encoding="utf-8" indent="no"></xsl:output> 

    <xsl:template match="/"> 
    <xsl:for-each select="//app-method"> 
    <xsl:if test='./required-roles/role[@name="administrator"]'> 
    <xsl:copy-of select="." /> 
    </xsl:if> 
    </xsl:for-each> 
    </xsl:template> 

</xsl:stylesheet> 

il fonctionne parfaitement, mais .. Est-il possible de le faire sans "xsl: copy-of"? Pensez que je dois utiliser quelque chose comme "node-name ('blabla')" et value-of? .. Et comment sélectionner un ensemble de paramètres de méthodes (distincts)? (Nom param = « nom du paramètre »), oui je dois utiliser « clé » mais ne peut pas trouver de bons échantillons avec elle

Un grand merci

PS Lors de la conversion xml-> xml j'utiliser Far ("xsl in.xml transform.xsl out.xml"), parce qu'il ya une erreur étrange en essayant de le faire à partir de cdm.exe, je n'aime pas un peu, est-il un autre moyen de convertir xmls?

+0

Il y a tellement de questions ici ... Ja! –

Répondre

1

Distinct

<xsl:key name="pkey" match="param" use="@name"/> 

    <xsl:template match="/"> 
     <xsl:for-each select='//app-method/asd/param[generate-id() = generate-id(key("pkey", @name)[1])]'> 
      <parameter> 
      <xsl:value-of select="@name"/> 
      </parameter> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

unique

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 

    <xsl:key name="pkey" match="@name" use="."/> 

    <xsl:template match="/"> 
     <xsl:for-each select="//app-method/asd"> 
      <xsl:copy-of select='param[@name[generate-id() = generate-id(key("pkey",.)[1])]]'/> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

En utilisant cmd.exe pour convertir XML: télécharger MSXSL.EXE (nouveau) le mettre dans un certain dossier système (qui est déjà inclus dans la variable de chemin) puis à partir de la ligne de commande msxsl source.xml transformer.xsl -o result.xml

Je vais écrire demain sur la copie sans "la copie de"

BTW: bon Tutorial

+0

Que voulez-vous dire par la différence entre Distinct et Unique?Vos extraits de code ne font-ils pas la même chose, mis à part la différence de format de sortie, ' foo' vs' ... '? – LarsH

2

Cela fonctionne parfaitement, mais .. Y at-il possible de le faire sans "xsl: copy-of"? Pensez-je utiliser quelque chose comme "nom-noeud ('blabla')" et la valeur de? ..

Lisez à propos de l'instruction <xsl:element> et aussi sur la identity rule.

.. Et comment sélectionner un ensemble de méthodes paramètres (distincts)? (Param name = « nom du paramètre »), oui, je dois utiliser « clé » mais ne peut pas trouver de bons échantillons avec elle

Ceci est une deuxième question (sur trois) et très différent de celui la première. Lisez à propos de Muenchian grouping. Et demandez-le comme une question distincte.

+0

Merci, je l'ai déjà fait distinctement, C'était assez facile –

+0

En train de lire sur et

Questions connexes