0

を取得しDataSet、にロードXmlDocumentし、XSLTファイルで変換して、出力ファイルから特殊文字を削除しようとしています。

省略されたコード:

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")、間違っているかもしれませんが、そこに配置しました。具体的には、®などの文字を出力から削除する必要があります。エンコーディングでない場合、これらの文字を取り除く方法はありますか?

4

2 に答える 2

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);
}

次に、必要な特殊文字の一部を保持できるようにコードを調整します

于 2013-03-26T21:35:19.190 に答える
0

この文字はISO-8859-1に存在するため、エンコードを切り替えることはできません。ASCIIのような基本的なエンコーディングに切り替えると、認識できない記号が疑問符に変更されてしまいます。

私の解決策はJhigsに似ていますが、DataSet行をループして、手動で正規表現フィルターを適用したくありませんでした。私はこの質問への答えを使用しました:

特定のタグについてのみ、XSLTを介してXMLから特殊文字を削除します

<Description>
    <xsl:value-of select="translate(DESC, '&lt;/&gt;&#x2122;&#xAE;', '')" />
</Description>
于 2013-03-27T14:13:09.867 に答える