2009-09-17 24 views
0

C#で指定した特定のノードのすべてのインスタンスで空白を削除するにはどうすればよいですか?たとえばのは、私は次のXML文書を持っているとしましょう:私が望む何XMLノードから空白を削除する

<XML_Doc> 

    <Record_1> 
    <Name>Bob</Name> 
    <ID_Number>12345</ID_Number> 
    <Sample> 
    </Sample> 
    </Record_1> 

    <Record_2> 
    <Name>John</Name> 
    <ID_Number>54321</ID_Number> 
    <Sample> 
    </Sample> 
    </Record_2> 

</XML_Doc> 

<Sample>タグのすべてのインスタンスを取ると、それは次のようになりますので、書式を変更することです:

<XML_Doc> 

    <Record_1> 
    <Name>Bob</Name> 
    <ID_Number>12345</ID_Number> 
    <Sample></Sample> 
    </Record_1> 

    <Record_2> 
    <Name>John</Name> 
    <ID_Number>54321</ID_Number> 
    <Sample></Sample> 
    </Record_2> 

</XML_Doc> 

編集:

XMLファイルを使用する他のアプリケーションは私によって書かれていませんし、XML文書自体の構造を変更することはできません。私は、XMLファイルを解析し、指定したノードの各インスタンスを置き換えるユーティリティを書いています。 <Sample></Sample>タグが同じ行にある例は、ドキュメントが元々どのようにフォーマットされているか、他のアプリケーションが正しく読むことができるようにするために必要なものです。

+0

あなただけのXMLをフォーマットしたり、XMLでwhitepaceや他の文字を保持したい場合はしているしたい場合には、はっきりしません。あなたの例では、空白を削除し、保存しないようです。 –

+0

あなたは正しいです、私はものを後方に述べました。 –

+0

元のXMLには何の問題もありません。終了ノードが別の行と同じ行であれば、アプリケーションは異なる動作をするべきではありません。このXMLを使用しているアプリケーションはそれを拒否していますか? – shahkalpesh

答えて

1

空白を保存すること(タブ、キャリッジリターンなどの形式)に興味がある場合は、CDATA(解析されていない文字データ)を使用できます。あなただけの審美的な目的のために特定の方法でフォーマットされたXML文書を持つようにしたい場合は

<![CDATA[ 
]]> 

しかし、私は一人でそれを残すためにあなたを助言します。これはあなたのコメントに基づいて

<description><![CDATA[<P>hello world</P>]]></description> 
0

を生成し、私はあなた使用することができるかもしれないと思う

XmlNode itemDescription = doc.CreateElement("description"); 
XmlCDataSection cdata = doc.CreateCDataSection("<P>hello world</P>"); 
itemDescription.AppendChild(cdata); 
item.AppendChild(itemDescription); 

:次のコードを使用してXML文書にCDATAセクションを書き込むには

XmlWriterSettings.NewLineHandlingプロパティは、テキストノードがキャリッジリターンをどのように処理するかを変更します。実験する必要があります。私は受け取り側のアプリケーションに問題を解析している行があり、\ r \ nか何かを探していると思われる。

1

私はあなたが私は、XSLT変換を使用することをお勧めし

xml.Settings.NewLineHandling = NewLineHandling.Entitize; 
1

を設定したいと思います。このようにすると、空白の削除または保存を制御できます。

MSDNは、この問題に対処記事、参照を持っていますControlling White Space with the DOM

関連する問題