2012-04-09 284 views
-1

有人能幫助我。我需要在C#中刪除節點「xsl:variable」,如下所示,這裏是兩個xsl:模板節點,其中包含子元素xsl:variable。在這個示例中,我需要使用C#將其刪除。C#XSLT刪除節點

事情是這樣的:

XmlDocument d = new XmlDocument(); 
d.Load("MyFileName.Xml"); 
XmlNode t = d.SelectSingleNode("/navigation/page[@id='1']"); 
t.ParentNode.RemoveChild(t); 
d.Save(); 

但我不能得到 '的xsl:變量' 的路徑d.SelectSingleNode()

請幫幫我嗎?

THIS IS XSLT:

<xsl:template name="Aggregate:RealECBooleanToXMLBoolean"> 
     <xsl:param name="RealECBoolean" select="/.."/> 
     <xsl:variable name="var1_result"> 
      <xsl:value-of select="($RealECBoolean = 'Yes')"/> 
      <xsl:value-of select="($RealECBoolean = 'YES')"/> 
      <xsl:value-of select="($RealECBoolean = 'X')"/> 
     </xsl:variable> 
     <xsl:variable name="var2_resultof_any" select="boolean(translate(normalize-space($var1_result), 'false0 ', ''))"/> 
     <xsl:choose> 
      <xsl:when test="string((string((string($var2_resultof_any) != 'false')) != 'false')) != 'false'"> 
       <xsl:value-of select="(string((string($var2_resultof_any) != 'false')) != 'false')"/> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="false()"/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
    <xsl:template name="Aggregate:LookupRECodeName"> 
     <xsl:param name="RECode" select="/.."/> 
     <xsl:call-template name="vmf:vmf1_inputtoresult"> 
      <xsl:with-param name="input" select="$RECode"/> 
     </xsl:call-template> 
    </xsl:template> 
+0

它可以不被發現,因爲「的xsl:」節點命名空間沒有被定義。此鏈接可以幫助: http://stackoverflow.com/questions/443250/creating-a-specific-xml-document-using-namespaces-in-c-sharp – M3NTA7 2012-04-09 18:52:26

+0

謝謝M3NTA7我有一個代碼,讓所有的xsl:模板節點,但下一步是刪除所有的孩子xsl:變量節點,我不能做這個樣本鞋面。需要SingleNode值。 – Zire 2012-04-09 18:58:41

回答

0

您需要passs到SelectNodesSelectSingleNode名稱空間管理器定義xsl前綴:

XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xDoc.NameTable); 
namespaceManager.AddNamespace("xsl" , "http://www.w3.org/1999/XSL/Transform"); 

,然後:

XmlNode variableNode = xDoc.SelectSingleNode("//xsl:variable", namespaceManager); 

將選擇第一xsl:variable元件,或

XmlNodeList variableNodes = xDoc.SelectNodes("//xsl:variable", namespaceManager); 

將選擇所有xsl:variable元件

0

這裏有一個想法。我不確定在使用SelectNodes時是否需要'xsl'名稱空間,您將不得不對此進行試驗。

公共無效YouMethod() {

XmlDocument doc = new XmlDocument(); 
doc.Load("your.xsl"); 

XmlNode root = doc.DocumentElement; 

// iterate the template nodes 
foreach (XmlNode tNode in root.SelectNodes("//xsl:template")) 
{ 
    // iterate the variable child nodes 
    foreach (XmlNode vNode in tNode.SelectNodes("xsl:variable")) 
    { 
     tNode.RemoveChild(vNode); 
    } 
} 

doc.Save(); 

}

+0

再次感謝M3NTA7我看到我有root.SelectNodes問題(「// XSL:模板」))的一部分。我試圖刪除xsl,但再次出現錯誤。我發現我需要XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xDoc.NameTable); 'namespaceManager',然後得到這個錯誤'命名空間前綴'xsl'未定義。' – Zire 2012-04-09 20:07:32

+0

你還有問題嗎?這對我們看代碼會有所幫助。這樣我們可以看到你在嘗試什麼。 – M3NTA7 2012-04-09 20:29:05

+0

是的,我還有問題,可能是我可以給你發送xsl文件? – Zire 2012-04-09 20:31:36