Bonjour,
Après des heures de recherche afin de pouvoir utiliser web.sitemap en mode programmé dans ma master page, je vous livre ici la méthode la plus simple afin de parser le fichier xml :
Tout d’abord le fichier XML web.sitemap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?xml version="1.0" encoding="UTF-8"?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0"> <siteMapNode title="Accueil"> <siteMapNode title="Nos métiers"> <siteMapNode url="location-camion-paca.aspx" title="SN SMTM LOCATION" /> <siteMapNode url="transport-marchandise-paca.aspx" title="SN SMTM TRANSPORT" /> <siteMapNode url="transport-express-paca.aspx" title="SN SMTM EXPRESS" /> <siteMapNode url="prestataire-transport-frigorifique-paca.aspx" title="SN SMTM FROID" /> </siteMapNode> <siteMapNode title="SN SMTM"> <siteMapNode url="implantations-snsmtm.aspx" title="LES IMPLANTATIONS SN SMTM" /> <siteMapNode url="flotte-reference-transport.aspx" title="Notre Flotte, nos Références" /> <siteMapNode url="transport-paca-objectif-co2.aspx" title="Objectif Co²" /> </siteMapNode> <siteMapNode url="cotation-transport.aspx" title="DEMANDE DE COTATION" /> <siteMapNode url="#footer" title="NOUS CONTACTER" /> </siteMapNode> </siteMap> |
Dans mon cas je ne devais utiliser que url et title, on peut rajouter autant d’infos que vous désirez (description, …)
A savoir, une ligne de titre, ex :
1 |
<siteMapNode title="Nos métiers"> |
ne doit pas contenir « # » en url par exemple, car si ce même lien se reproduit cela plante, effectivement impossible d’avoir deux liens identiques dans un même fichier de liens.
La partie cs intégrée à ma master page :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
protected StringBuilder sb = new StringBuilder(); protected void Page_Load(object sender, EventArgs e) { XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("~/web.sitemap")); foreach (XmlNode itemNode in doc.DocumentElement.ChildNodes) { XmlElement itemElement = (XmlElement)itemNode; // Premier node = Accueil > on zappe dans mon cas //sb.AppendFormat("<li>[Item]: {0} | {1}</li>", itemElement.Attributes["title"].Value, itemElement.Attributes["url"].Value); if (itemNode.ChildNodes.Count > 0) { foreach (XmlNode childNode in itemNode.ChildNodes) { XmlNode node = childNode.Attributes["url"]; if (node != null) sb.AppendFormat("<li>[Item]: {0} | {1}</li>", childNode.Attributes["title"].Value, childNode.Attributes["url"].Value); else { sb.AppendFormat("<li>[Item]: {0} </li>", childNode.Attributes["title"].Value); foreach (XmlNode childNode2 in childNode.ChildNodes) { sb.AppendFormat("<li>[SubItem]: {0} | {1}</li>", childNode2.Attributes["title"].Value, childNode2.Attributes["url"].Value); } } } } } } |
Il faut ajouter l’ assembly :
- System.Xml
Méthode : je lis le premier node parent, et je regarde si il existe des nodes enfants, si oui alors j’affiche tous les enfants.
A savoir, pour checker si une valeur existe utiliser cette méthode :
1 2 |
XmlNode node = childNode.Attributes["valeur de champ"]; if (node != null){ ... } |
Prochain cours, génération de web.sitemap et fichier d’indexation google …