2010-07-13 4 views
0

Je crée une petite fonction de recherche sur un site que je suis en train de créer. Je travaille avec Umbraco CMS, et tous les nœuds que j'ai besoin de chercher sont des enfants de la page sur laquelle on cherche. En ce moment j'ai un champ de recherche avec sept champs. trois champs de saisie et quatre listes déroulantes.Filtrer XML à partir des paramètres de recherche

C'est le XML que je dois trouver mes résultats de:

<Modellist id="1073" parentID="1052" level="2" writerID="0" creatorID="0" nodeType="1065" template="1066" sortOrder="0" createDate="2010-07-12T20:23:35" updateDate="2010-07-12T21:25:13" nodeName="Piger-girls" urlName="piger-girls" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073" isDoc=""> 
<title>Girls</title> 
<metaDescription></metaDescription> 
<metaTitle /> 
<metaKeywords /> 
<nameInMenu /> 
<Model id="1075" parentID="1073" level="3" writerID="0" creatorID="0" nodeType="1067" template="1068" sortOrder="1" createDate="2010-07-12T20:25:31" updateDate="2010-07-12T21:01:58" nodeName="Lene Madsen" urlName="lene-madsen" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073,1075" isDoc=""> 
    <title>Lene M</title> 
    <images></images> 
    <polaroid /> 
    <videoSmall /> 
    <videoLarge /> 
    <modelnummer>014</modelnummer> 
    <height>120</height> 
    <size>122</size> 
    <eyeColor>Blå</eyeColor> 
    <hairColor>Blond</hairColor> 
    <shoeSize>26-30</shoeSize> 
</Model> 
<Model id="1077" parentID="1073" level="3" writerID="0" creatorID="0" nodeType="1067" template="1068" sortOrder="2" createDate="2010-07-13T19:04:42" updateDate="2010-07-13T19:05:23" nodeName="Julie B" urlName="julie-b" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073,1077" isDoc=""> 
    <title>Julie B</title> 
    <images></images> 
    <polaroid /> 
    <videoSmall /> 
    <videoLarge /> 
    <modelnummer>002</modelnummer> 
    <height>129</height> 
    <size>104</size> 
    <eyeColor>Grøn</eyeColor> 
    <hairColor>Sort</hairColor> 
    <shoeSize>26-30</shoeSize> 
</Model> 
<Model id="1078" parentID="1073" level="3" writerID="0" creatorID="0" nodeType="1067" template="1068" sortOrder="3" createDate="2010-07-13T19:05:38" updateDate="2010-07-13T19:06:06" nodeName="Marlene U" urlName="marlene-u" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073,1078" isDoc=""> 
    <title>Marlene U</title> 
    <images></images> 
    <polaroid /> 
    <videoSmall /> 
    <videoLarge /> 
    <modelnummer>007</modelnummer> 
    <height>89</height> 
    <size>86</size> 
    <eyeColor>Grå</eyeColor> 
    <hairColor>Blond</hairColor> 
    <shoeSize>26-30</shoeSize> 
</Model> 
<Model id="1079" parentID="1073" level="3" writerID="0" creatorID="0" nodeType="1067" template="1068" sortOrder="4" createDate="2010-07-13T19:06:18" updateDate="2010-07-13T19:07:20" nodeName="Louise N" urlName="louise-n" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073,1079" isDoc=""> 
    <title>Louise N</title> 
    <images></images> 
    <polaroid /> 
    <videoSmall /> 
    <videoLarge /> 
    <modelnummer>022</modelnummer> 
    <height>148</height> 
    <size>152</size> 
    <eyeColor>Brun</eyeColor> 
    <hairColor>Brun</hairColor> 
    <shoeSize>31-35</shoeSize> 
</Model> 
<Model id="1080" parentID="1073" level="3" writerID="0" creatorID="0" nodeType="1067" template="1068" sortOrder="5" createDate="2010-07-13T19:07:35" updateDate="2010-07-13T19:07:59" nodeName="Marie A" urlName="marie-a" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073,1080" isDoc=""> 
    <title>Marie A</title> 
    <images></images> 
    <polaroid /> 
    <videoSmall /> 
    <videoLarge /> 
    <modelnummer>010</modelnummer> 
    <height>146</height> 
    <size>128</size> 
    <eyeColor>Blå</eyeColor> 
    <hairColor>Rød</hairColor> 
    <shoeSize>36-40</shoeSize> 
</Model> 
<Model id="1081" parentID="1073" level="3" writerID="0" creatorID="0" nodeType="1067" template="1068" sortOrder="6" createDate="2010-07-13T19:08:22" updateDate="2010-07-13T19:08:53" nodeName="Sandra F" urlName="sandra-f" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073,1081" isDoc=""> 
    <title>Sandra F</title> 
    <images></images> 
    <polaroid /> 
    <videoSmall /> 
    <videoLarge /> 
    <modelnummer>013</modelnummer> 
    <height>126</height> 
    <size>122</size> 
    <eyeColor>Blå</eyeColor> 
    <hairColor>Brun</hairColor> 
    <shoeSize>31-35</shoeSize> 
</Model> 
<Model id="1082" parentID="1073" level="3" writerID="0" creatorID="0" nodeType="1067" template="1068" sortOrder="7" createDate="2010-07-13T19:09:10" updateDate="2010-07-13T19:09:51" nodeName="Laura N" urlName="laura-n" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073,1082" isDoc=""> 
    <title>Laura N</title> 
    <images></images> 
    <polaroid /> 
    <videoSmall /> 
    <videoLarge /> 
    <modelnummer>004</modelnummer> 
    <height>73</height> 
    <size>74</size> 
    <eyeColor>Grøn</eyeColor> 
    <hairColor>Rød</hairColor> 
    <shoeSize>18-20</shoeSize> 
</Model> 
<Model id="1083" parentID="1073" level="3" writerID="0" creatorID="0" nodeType="1067" template="1068" sortOrder="8" createDate="2010-07-13T19:10:09" updateDate="2010-07-13T19:11:19" nodeName="Gitte R" urlName="gitte-r" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073,1083" isDoc=""> 
    <title>Gitte R</title> 
    <images></images> 
    <polaroid /> 
    <videoSmall /> 
    <videoLarge /> 
    <modelnummer>017</modelnummer> 
    <height>105</height> 
    <size>110</size> 
    <eyeColor>Grøn</eyeColor> 
    <hairColor>Brun</hairColor> 
    <shoeSize>21-25</shoeSize> 
</Model> 
<Model id="1084" parentID="1073" level="3" writerID="0" creatorID="0" nodeType="1067" template="1068" sortOrder="9" createDate="2010-07-13T19:11:30" updateDate="2010-07-13T19:12:56" nodeName="Mia H" urlName="mia-h" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073,1084" isDoc=""> 
    <title>Mia H</title> 
    <images></images> 
    <polaroid /> 
    <videoSmall /> 
    <videoLarge /> 
    <modelnummer>015</modelnummer> 
    <height>138</height> 
    <size>140</size> 
    <eyeColor>Blå</eyeColor> 
    <hairColor>Rød</hairColor> 
    <shoeSize>31-35</shoeSize> 
</Model> 

Les balises appelées « taille », « couleurYeux », « hairColor » et « shoeSize » doivent être jumelés à les quatre listes déroulantes dans ma boîte de recherche. La balise appelée "titre" peut être recherchée dans un champ de saisie appelé nom. Et puis j'en ai une autre aux champs de texte appelés "heightFrom" et "heightTo". Ici, un utilisateur peut effectuer une recherche sur la hauteur, et ceci doit être comparé à la balise XML appelée "height".

Il est facile pour moi de dire que si le nom de champ n'est pas vide, je peux le faire:

<xsl:apply-templates select="$currentPage/*[@isDoc][contains(Exslt.ExsltStrings:lowercase(./title),$name)]"> 
       <xsl:sort data-type="text" select="title" order="ascending"/> 
      </xsl:apply-templates> 

$ name contient le nom recherché. Et cela me donnera tous les nœuds qui ont le nom recherché dans le "title" -tag. Mais comment puis-je partir de là. Bien sûr, je peux créer un choix, avec beaucoup (plus de 40) de quand, mais ce serait un gros travail et très difficile à maintenir dans le futur. Une des choses difficiles est qu'aucun des champs n'est obligatoire, donc je ne sais pas lequel des champs sera rempli. Puis-je faire autre chose?

Par ailleurs - une URL pourrait dans l'exemple ressembler à ceci: http://my.site/search.aspx?hf=150&ht=&size=62&ec=&hc=&ss=&name=Julie

J'ai toutes les valeurs dans sept variables comme ceci:

<xsl:variable name="heightFrom" select="umbraco.library:Request('hf')"/> 
<xsl:variable name="heightTo" select="umbraco.library:Request('ht')"/> 
<xsl:variable name="size" select="umbraco.library:Request('size')"/> 
<xsl:variable name="eyeColor" select="umbraco.library:Request('ec')"/> 
<xsl:variable name="shoeSize" select="umbraco.library:Request('ss')"/> 
<xsl:variable name="hairColor" select="umbraco.library:Request('hc')"/> 
<xsl:variable name="name" select="Exslt.ExsltStrings:lowercase(umbraco.library:Request('name'))"/> 

Toute aide et entrées seront grandement appreaciated !

Merci à l'avance :)

/Kim

+0

Pouvez-vous dire que je vous ai understanded si je dirais que vous voulez que les éléments 'model' qui correspondent aux critères variables? –

+0

Ouais c'est correct. Peut-être que je ne l'ai pas très bien décrit. Mais tu as raison. Je veux que les éléments-modèles correspondent aux critères de recherche. Si vous avez un indice ou un pourboire, dites-le simplement, cela pourrait me conduire dans la bonne direction :) -Merci. –

Répondre

1

Je pense que vous avez seulement besoin d'une expression XPath dans le contexte. Cette styleshet:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:param name="heightFrom" select="120"/> 
    <xsl:param name="heightTo" select="130"/> 
    <xsl:param name="size" /> 
    <xsl:param name="eyeColor" /> 
    <xsl:param name="shoeSize" /> 
    <xsl:param name="hairColor" /> 
    <xsl:param name="name" /> 
    <xsl:template match="/"> 
     <Modellist> 
      <xsl:copy-of select="*/Model[height >= $heightFrom and $heightTo >= height 
           or 
          height >= $heightFrom and not($heightTo) 
           or 
          not($heightFrom) and $heightTo >= height] 
          [size = $size or not($size)] 
          [eyeColor = $eyeColor or not($eyeColor)] 
          [$shoeSize >= substring-before(shoeSize,'-') 
           and 
          substring-after(shoeSize,'-') >= $shoeSize 
           or 
          not($shoeSize)] 
          [hairColor = $hairColor or not($hairColor)] 
          [title = $name or not($name)]"/> 
     </Modellist> 
    </xsl:template> 
</xsl:stylesheet> 

Résultat:

<Modellist> 
    <Model id="1075" parentID="1073" level="3" writerID="0" creatorID="0" nodeType="1067" template="1068" sortOrder="1" createDate="2010-07-12T20:25:31" updateDate="2010-07-12T21:01:58" nodeName="Lene Madsen" urlName="lene-madsen" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073,1075" isDoc=""> 
     <title>Lene M</title> 
     <images></images> 
     <polaroid /> 
     <videoSmall /> 
     <videoLarge /> 
     <modelnummer>014</modelnummer> 
     <height>120</height> 
     <size>122</size> 
     <eyeColor>Blå</eyeColor> 
     <hairColor>Blond</hairColor> 
     <shoeSize>26-30</shoeSize> 
    </Model> 
    <Model id="1077" parentID="1073" level="3" writerID="0" creatorID="0" nodeType="1067" template="1068" sortOrder="2" createDate="2010-07-13T19:04:42" updateDate="2010-07-13T19:05:23" nodeName="Julie B" urlName="julie-b" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073,1077" isDoc=""> 
     <title>Julie B</title> 
     <images></images> 
     <polaroid /> 
     <videoSmall /> 
     <videoLarge /> 
     <modelnummer>002</modelnummer> 
     <height>129</height> 
     <size>104</size> 
     <eyeColor>Grøn</eyeColor> 
     <hairColor>Sort</hairColor> 
     <shoeSize>26-30</shoeSize> 
    </Model> 
    <Model id="1081" parentID="1073" level="3" writerID="0" creatorID="0" nodeType="1067" template="1068" sortOrder="6" createDate="2010-07-13T19:08:22" updateDate="2010-07-13T19:08:53" nodeName="Sandra F" urlName="sandra-f" writerName="Administrator" creatorName="Administrator" path="-1,1052,1073,1081" isDoc=""> 
     <title>Sandra F</title> 
     <images></images> 
     <polaroid /> 
     <videoSmall /> 
     <videoLarge /> 
     <modelnummer>013</modelnummer> 
     <height>126</height> 
     <size>122</size> 
     <eyeColor>Blå</eyeColor> 
     <hairColor>Brun</hairColor> 
     <shoeSize>31-35</shoeSize> 
    </Model> 
</Modellist> 
Questions connexes