2011-12-21 38 views
0

所有使用POX的tracer-bullet版本中的代碼都很好,但後來我添加了XSL,因此我無法再使用.Element("anything")對於XSL文檔,XElementObj.Root.Element(「任何東西」)始終爲空

這裏是我的xml文檔:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="*|@*"> 
    <xsl:apply-templates select="*|@*" /> 
</xsl:template> 
<xsl:template match="CO"> 
    <html> 
    <head> 
    <title>My Page</title> 
    </head> 
    <body></body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

這會引發空引用異常:

templateDoc.Root.Element("body").Add(newElements); 

因爲.Element("body")爲空。 templateDoc是一個XDocument對象,已使用以下XML正確加載:XDocument.Load(filePath);

爲了能夠在此處找到主體節點,我需要做些什麼?

回答

1

您需要指定命名空間。

XDocument doc = XDocument.Load(file); 
    XNamespace ns = "http://www.w3.org/1999/XSL/Transform"; 

    var result = from ele in doc.Descendants(ns + "stylesheet").Descendants("html") 
       select ele; 

OR

var result = (from ele in doc.Descendants(ns + "stylesheet").Descendants("body") 
       select ele).FirstOrDefault(); 

    if (result != null) 
    { 

     result.Add(new XElement("p", "Hello World")); 
     doc.Save(file); 
    } 
+0

非常感謝AVD!我正在尋找一個XDocument對象的名稱空間屬性 - 不理解類的層次結構。這非常有幫助。 – 2011-12-21 02:33:53