2012-11-22 19 views
34

Próbuję zadzwonić SelectNode z XmlDocument klasy i kłopoty z powodu tego błędu:Wymagany menedżer przestrzeni nazw lub XsltContext. Ta kwerenda ma prefiks, zmiennych lub zdefiniowanej przez użytkownika funkcja

Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.

Mój kod:

public void Add(ref XmlDocument xmlFormat, String strName) 
    { 
     XmlDocument dom; 
     XSLTemplate xsl = null; 
     String strPath = ""; 
     XmlNodeList nl; 
     XmlAttribute na; 
     int n; 

     nl = (XmlNodeList)xmlFormat.SelectNodes("//xsl:import/@href",nsm); 
    } 

i xsl :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:import href="stylesheets/r_adresetiket.xsl" /> 
    <xsl:template match="/"> 
     <xsl:call-template name="retouradres"> 
      <xsl:with-param name="_retouradres" select="data/adresetiket/_retouradres" /> 
      <xsl:with-param name="minofdir" select="data/adresetiket/afzendgegevens/afzendgegevens" /> 
      <xsl:with-param name="checked" select="data/adresetiket/LB" /> 
     </xsl:call-template> 
    </xsl:template> 
</xsl:stylesheet> 

Odpowiedz

41

trzeba dodać xsl nazw do XmlNamespaceManager:

var document = new XmlDocument(); 
document.Load(...); 
var nsmgr = new XmlNamespaceManager(document.NameTable); 
nsmgr.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform"); 

var nl = document.SelectNodes("//xsl:import/@href", nsmgr); 
+0

Dzięki Ria Roboczej –

+0

dziękuję! Doskonały przykład dla mnie, teraz wszystko działa dobrze. – Andrew

2

Wiem, że to stare pytanie, na które odpowiedziano, ale może być pomocne dla osoby, która chce uniknąć używania numeru XmlNamespaceManager. Dokument można poprzecinany GetElementsByTagName ale potrzebuje więcej uwagi, należy już wiedział o strukturze swojej xmlDocument:

var nodes = document.GetElementsByTagName("xsl:import"); 
var href = nodes[0].Attributes["href"];//be sure which node to take