Mvp.Xml inclut une fonction d'extension similaire dyn2:dynamic.
objet DYN2: évaluer (ensemble de nœuds, chaîne , chaîne?)
Le DYN2: évaluer la fonction évalue une chaîne comme une expression XPath et renvoie la valeur résultante, qui pourrait être un booléen, nombre, chaîne, ensemble de noeuds, fragment d'arbre résultat ou objet externe.
premier argument ensemble de nœuds fournit un noeud de contexte (le premier noeud dans l'ensemble de nœuds passé), de telle sorte que les chemins sélection sont évalués par rapport à elle. L'argument de deuxième chaîne est l'expression XPath à évaluer. Le troisième argument de chaîne optionnel fournit des liaisons d'espace de noms à utiliser pour résoudre les préfixes d'espace de noms dans l'expression XPath . Les espaces de noms sont définis dans le style XML, en tant qu'espace liste séparée des espaces de noms attributs de déclaration.
Tous les préfixes d'espace de noms qui sont dans le pour le noeud contextuel (ou son nœud parent si le nœud de contexte n'est pas nœud d'élément) peut être référencé dans le évalué l'expression XPath. Notez si cela s'appuyant sur l'espace de noms préfixes définis dans le code source XML est très peu fiable. Nous encourageons les utilisateurs à définir explicitement les liaisons d'espace de noms dans le troisième argument à la place.
Si l'ensemble de nœuds passé en premier argument est vide (aucun nœud de contexte) ou la chaîne d'expression transmise en tant que second argument est une expression XPath invalide (y compris une chaîne vide), cette fonction retourne un chaîne vide. Les déclarations d'espace de noms mal formé dans le troisième argument sont ignorées.
Notez que cette fonction est plus limitée à la fonction dyn: evaluate() de EXSLT. Plus formellement:
- Aucune information de position et de taille de contexte n'est disponible.
- Aucune liaison de variable - cette fonction est incapable d'évaluer les expressions XPath, qui contiennent des références de variable!
- Aucune fonction d'extension personnalisée: seules les fonctions XPath principales et toutes les fonctions d'extension prises en charge par EXSLT.NET sont disponibles.
- Aucun noeud en cours, donc l'expression ne peut pas contenir les appels de la fonction current().
- Aucune information de définition de clé disponible, l'expression ne peut donc pas contenir les appels de la fonction key().
- Aucune définition de format décimal personnalisé sont avilable, de sorte que l'expression ne peuvent pas contenir la fonction fomat numéro() qui se réfèrent à une définition .
Il n'y a pas de version 1 paramètre de cette fonction d'extension, car il aurait pas de contexte pour évaluer l'expression.
Cette extension suivante est une version 1 paramètre d'évaluation. Le contexte d'évaluation est fixe.
public class MyExtension
{
IXPathNavigable context;
public MyExtension(IXPathNavigable context)
{
this.context = context;
}
public object Evaluate(string expression)
{
return context.CreateNavigator().Evaluate(expression);
}
}
XsltArgumentList args = new XsltArgumentList();
args.AddExtensionObject("my-ext", new MyExtension(doc));
xslt.Transform(doc, args output);
Oui J'ai essayé d'utiliser l'objet GDNDynamicExtension dans les objets d'extension de mon XslArgumentList, mais une erreur m'indique qu'aucune méthode évaluée avec un paramètre n'a pu être trouvée. – sowee15
Vous m'avez mis sur la bonne voie, je dois juste faire quelques changements mineurs pour le faire fonctionner. Je posterai mon objet d'extension au cas où quelqu'un d'autre en aurait besoin. Merci beaucoup pour votre aide. – sowee15