2008-09-23 44 views
1

在ASP.NET 2.0網站中,我有一個表示一些格式良好的XML的字符串。我目前正在創建一個XmlDocument對象,並運行一個XSL轉換以在Web窗體中顯示。在XML輸入開始包含名稱空間之前,一切正常。閱讀XML名稱空間中的字符串以用於XSL轉換

如何讀取此字符串並允許命名空間?

我已經包含了下面的當前代碼。字符串來源來自WordPress RSS提要中的HTML編碼節點。

XPathNavigator myNav= myPost.CreateNavigator(); 
XmlNamespaceManager myManager = new XmlNamespaceManager(myNav.NameTable); 
myManager.AddNamespace("content", "http://purl.org/rss/1.0/modules/content/"); 
string myPost = HttpUtility.HtmlDecode("<post>" + 
    myNav.SelectSingleNode("//item[1]/content:encoded", myManager).InnerXml + 
    "</post>"); 
XmlDocument myDocument = new XmlDocument(); 
myDocument.LoadXml(myPost.ToString()); 

的錯誤是在最後一行:

「System.Xml.XmlException: 'W' 是一個未聲明命名空間線12,位置201在System.Xml.XmlTextReaderImpl.Throw(例外e)...「

回答

0

Gut感覺 - 在內容中聲明的命名空間之一:編碼正在被丟棄(可能是因爲你正在使用文字.InnerXml屬性)

什麼是'w'命名空間計算在myNav DOM中?您需要將xmlns:w =添加到您的發佈節點。可能還會有其他人。

+0

你是直覺的目標。看起來帖子是從MS Word複製並粘貼的,所以HTML包含具有「w」名稱空間的屬性,但是沒有嵌入式聲明。 – Mattio 2008-09-23 14:45:37

1

你的代碼看起來不錯。

該問題可能是在您嘗試加載的xml文檔中。 它必須有一個「W」前綴的元素,而無需XML文檔

例如,在宣佈前綴,你應該有:

<test xmlns:w="http://..."> 
    <w:elementInWNamespace /> 
</test> 

(文檔可能是缺少xmlns:w="http://"