2012-11-22 9 views
34

ben bu hata nedeniyle XmlDocument sınıf ve beladan SelectNode aramaya çalışıyorum:Ad Alanı Yöneticisi veya XsltContext gerekli. Bu sorgu önek, değişken varsa veya kullanıcı tanımlı fonksiyon

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

Kodum:

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); 
    } 

ve 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> 

cevap

41

Sen XmlNamespaceManager için xsl ad eklemek zorunda:

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

sayesinde Ria onun Çalışma –

+0

teşekkür ederiz: belge GetElementsByTagName tarafından geçilen edilebilir fakat fazla dikkat edilmesi gereken, zaten XMLDocument yapısı hakkında bildiği olmalı! Benim için mükemmel bir örnek, şu an iyi çalışıyor. – Andrew

2

Bunun eski bir soru olduğunu ve yanıtlandığını biliyorum, ancak XmlNamespaceManager kullanmaktan kaçınmak isteyen birine yardımcı olabilir.

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