2013-03-26 124 views
0

我正在將DataSet加載到XmlDocument中,使用XSLT文件對其進行轉換並嘗試從我的輸出文件中刪除特殊字符。刪除XmlCompiledTransform中的特殊字符

縮寫代碼:

DataSet ds = GetData(); //queries database 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(ds.GetXml()); 

XslCompiledTransform trans = new XmlCompiledTransform(); 
trans.Load("myTemplate.xslt"); 

XmlTextWriter writer = new XmlTextWriter("C:\output.xml", Encoding.GetEncoding("ISO-885901")); 

trans.Transform(doc, null, writer); 
writer.Close(); 

XSLT頭

<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 

我認爲這只是曾與編碼,這就是爲什麼我把Encoding.GetEncoding("ISO-8859-1")在那裏做,雖然我可能有錯誤的一。具體來說,我需要從輸出中刪除像®這樣的字符。如果它不是編碼,那麼我有什麼方法可以去除這些字符嗎?

+0

的想要的轉換的輸出的編碼在'XSL指定:output'指令:'的'。這與樣式表XML文檔的XML聲明的'encoding' pseude-attribute無關。 –

回答

0

顯然切換編碼特殊字符是不是要走的路,因爲這個人物存在於ISO-8859-1中,所以它仍然顯示出來。切換到像ASCII這樣的基本編碼只是最終將它無法識別的符號更改爲問號。

我的解決方案就像Jhigs,但我不想通過DataSet行循環,手動應用正則表達式過濾器的東西。我用這個問題的答案:

Remove special characters from XML via XSLT only for specific tags

<Description> 
    <xsl:value-of select="translate(DESC, '&lt;/&gt;&#x2122;&#xAE;', '')" /> 
</Description> 
0

你可以嘗試使用正則表達式。這將刪除所有的特殊字符

public static string RemoveSpecialCharacters(string specialCharacters) 
{ 
    Regex regex = new Regex("(?:[^a-z0-9 ]|(?<=['\"])s)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled); 
    return regex.Replace(specialCharacters, String.Empty); 
} 

那麼就調整你的代碼,這樣你就可以保留一些你需要