検索し、Visual C# では、XML ファイル内の特殊文字を置換する方法を指定します。NET

文書翻訳 文書翻訳
文書番号: 316063
すべて展開する | すべて折りたたむ

目次

概要

この資料では、Visual C# を使用して、拡張マークアップ言語 (XML) ファイル内の特殊文字を置換する方法について説明します。NET。

技法の説明

XML には、その他のマークアップ言語の一部として解釈される特殊文字を次の 5 つエンティティ参照が組み込まれています。

Character Name Entity Reference Character Reference Numeric Reference
Ampersand & & &
Left angle bracket &lt; < &#38;#60;
Right angle bracket &gt; > &#62;
Straight quotation mark &quot; " &#39;
Apostrophe &apos; ' &#34;


始め山かっこ、アンパサンド、およびその他の区切り記号をエスケープするのには、エンティティと文字参照を使用できます。数値文字参照を使用することもできます。すぐには認識された場合、数値文字参照が展開されます。さらに、数値文字参照が文字データとして扱われるため、数値文字参照使用できます。

いずれか、次の 2 つのエンティティを宣言する場合は。
  • &amp;
内部エンティティの置換テキストが文字がエスケープされている、対応する文字 (左の山かっこまたはアンパサンド) いますとしてそれらを宣言しなければなりません。この二重のエスケープはそれらへの参照は、整形式の結果が生成されるようにするには、これらのエンティティは必要です。

いずれかの次の 3 つのエンティティを宣言する場合は。
  • >
  • '
  • "
内部エンティティを置換後の文字列をエスケープするには、1 つの文字がそれらを宣言する必要があります。

特殊文字を置き換える必要があるかどうかを判断します。

必須ではありません XML ファイルのデータをデータベースから取得。

場合は、Microsoft を使用しています。NET Framework データは読み込まれ、格納されている、 データセット オブジェクトです。データを記述するときは、 データセット XML ファイルを使用するには WriteXml 方法は、「概要」セクションで参照されている特殊文字は、それぞれの文字参照を交換してください。そのため、XML ファイルを作成する場合や、使用している場合は、 データセット、交換用の特別な処理は不要です。

必要があります。 サード パーティ製の XML データに特殊文字が含まれている XML ファイル

場合によって XML ファイルまたは XML データは、第三者からこれらの特殊文字を使用できます。それをロードするときこのシナリオでは、データ エラーを生成します。 XmlDocument オブジェクトまたは XmlReader オブジェクトです。

アンパサンド文字を検出すると、次のエラー メッセージが表示されます。
解析中にエラーが発生しました。 entity_name、行 #、位置 #.
線の位置 # 位置 # 特殊文字の正確な位置を表します。

左の山かっこを検出すると、次のエラー メッセージが表示されます。
'<' character,="" hexadecimal="" value="" 0x3c,cannot="" be="" included="" in="" a="" name.=""></'> #、位置 #.
このエラー メッセージ、行 # 位置 # 左の山かっこが存在する位置を示していないが、2 番目の始め山かっこが来た。

終わり山かっこ (&gt;)、二重引用符 (")、またはアポストロフィ (')、XML ファイルを格納する場合は、 XmlReader および XmlDocument これらの文字にのみ 1 つの文字の置換が必要なためオブジェクトこれらのオブジェクトを処理します。

特殊文字を置換します。

アンパサンドと始め山かっこ文字を置換するのには
  1. XML ファイルを作成します。
  2. C# はビジュアルを作成します。Net アプリケーションを作成し、コードを挿入します。

XML ファイルを作成します。

コピーしてメモ帳に次のコードを貼り付けます、Customers.xml としてファイルを保存します。
<?xml version="1.0" standalone="yes"?>
<Customers>
<Customer>
<CustomerID>BLAUS</CustomerID>
<CompanyName>Blauer See Delikatessen</CompanyName>
<ContactName>Hanna Moos</ContactName>
<Region>test<ing</Region>
</Customer>
<Customer>
<CustomerID>SPLIR</CustomerID>
<CompanyName>Split Rail Beer & Ale</CompanyName>
<ContactName>Art raunschweiger</ContactName>
<Region>WY</Region>
</Customer>
</Customers>
				

Visual C# を作成します。Net

  1. 新しい視覚 C# を作成します。NET Windows のアプリケーションは次のとおり。
    1. Microsoft Visual Studio を起動します。NET。
    2. で、 ファイル メニューのポイント 新しい、し プロジェクト.
    3. で、 新しいプロジェクト ダイアログ ボックス、クリックして Visual C# プロジェクト 下にあります。 [プロジェクトの種類、し Windows アプリケーション 下にあります。 テンプレート.
  2. ドラッグします。 テキスト ボックス コントロール、2 ボタン コントロールとは データ グリッド ツールボックスから Form1.cs を既定のフォームを制御します。
  3. 設定は、 複数行 プロパティが テキスト ボックス するには True を指定します。.
  4. 次の名前空間をインポートします。
    using System.Xml;
    using System.IO;
    using System.Data.SqlClient;
    					
  5. 後に、次のコードを追加、 メイン 関数:
    string filepath = "C:\\Customers.xml";
    private void ReplaceSpecialChars(long linenumber)
            {
                System.IO.StreamReader strm;
                string strline;
                string strreplace = " ";
                string tempfile = "C:\\Temp.xml";
                try
                {
                    System.IO.File.Copy(filepath,tempfile,true);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    
                StreamWriter strmwriter = new StreamWriter(filepath);
                strmwriter.AutoFlush = true;
                strm = new StreamReader(tempfile);
                long i  = 0;
                while (i < linenumber - 1)
                {
                    strline = strm.ReadLine();
                    strmwriter.WriteLine(strline);
                    i = i + 1;
                }
    
                strline = strm.ReadLine();
                Int32 lineposition;
    		
                lineposition = strline.IndexOf("&");
                if (lineposition > 0) 
                {
                    strreplace = "&amp;";
                }
                else
                {
                    lineposition = strline.IndexOf("<",1);
                    if (lineposition > 0 )
                    {
                        strreplace = "<";
                    }
    
                }
                strline = strline.Substring(0, lineposition - 1) + strreplace + strline.Substring(lineposition + 1);
                strmwriter.WriteLine(strline);
    
                strline = strm.ReadToEnd();
                strmwriter.WriteLine(strline);
    
                strm.Close();
                strm = null;
    
                strmwriter.Flush();
                strmwriter.Close();
                strmwriter = null;
    
            }
    		
            public XmlDocument LoadXMLDoc() 
            {
            XmlDocument xdoc;
            long lnum;
    		
            try
            {
                xdoc = new XmlDocument();
                xdoc.Load(filepath);
            }
            catch (XmlException ex)
            {
                MessageBox.Show(ex.Message);
                lnum = ex.LineNumber;
                ReplaceSpecialChars(lnum);
    
                xdoc = LoadXMLDoc();
            }
        return (xdoc);
        }
    					
  6. 次のコードを追加、 Button1_Click イベント:
    XmlDocument xmldoc = new XmlDocument();
            xmldoc = LoadXMLDoc();
            XmlNode nextnode; 
            nextnode = xmldoc.FirstChild.NextSibling;
            this.textBox1.Text = nextnode.OuterXml.ToString();
    					
  7. 次のコードを追加、 Button2_Click イベント:
    DataSet ds = new DataSet();
                XmlDocument xdoc = new XmlDocument();
                SqlConnection cnNwind = new SqlConnection("Data source=myServerName;user id=myUser;Password=myPassword;Initial catalog=Northwind;");
                SqlDataAdapter daCustomers = new SqlDataAdapter("Select customerid,companyname,contactname, region from customers where region='WY'", cnNwind);
                string filepath = "C:\\Customers.xml";
                try
                {
                    daCustomers.Fill(ds, "Customers");
                    this.dataGrid1.DataSource = ds.Tables["Customers"];
                    ds.WriteXml(filepath);
                    xdoc.Load(filepath);
                    XmlNode nextnode; 
                    nextnode = xdoc.FirstChild.NextSibling;
                    textBox1.Text = nextnode.OuterXml.ToString();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    					
  8. プロパティを変更、 SqlConnection 接続文字列は環境に合わせて必要に応じてします。
  9. ビルドして、プロジェクトを実行します。
  10. クリックしてください。 Button1.

    受信したエラーの説明、エラーの説明と一致しますが 特殊文字を持つ XML ファイル必要があります。 セクションです。XML データが表示されます、 テキスト ボックス;アンパサンドを交換します。
  11. クリックしてください。 Button2.

    で、 データ グリッド、ことを確認します。 [得意先名] アンパサンドであり、 テキスト ボックス XML データを表示します。

関連情報

詳細については、Knowledge Base の資料を参照するのには、次の資料番号をクリックしてください。
251354検索し、Visual Basic では、XML ドキュメント内の特殊文字を置換する方法

プロパティ

文書番号: 316063 - 最終更新日: 2011年7月24日 - リビジョン: 6.0
キーワード:?
kbhowtomaster kbmsxml kbgrpdsmsxml kbmt KB316063 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:316063
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com