2011-12-21 8 views
0

POXを使用したトレーサ・ブレット・バージョンでは、すべて自分のコードでうまくいきましたが、XSLを追加しても使用できなくなりました。.Element("anything")XSLドキュメントの場合、XElementObj.Root.Element( "anything")は常にnullです。

ここで

は私のXMLドキュメントです:.Element("body")がヌルであるため、

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

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

これは、null参照の例外がスローされます。 templateDocは、上記のXMLを適切に読み込んだXDocumentオブジェクトです。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オブジェクトの名前空間プロパティを探していました。クラスの階層構造を理解できませんでした。これは非常に役に立ちます。 –

関連する問題