を残します。LINQのツーXML XElement.Removeは()私は(TCP/IPを介して受信)バイト配列から作成したXDocumentを持って、不要な空白
私は、特定のXMLノード(XElements)のためにと()XElement.Removeを呼び出すことにより、Xdocumentのオフ値「ポップ」それを取得した後に検索します。私の構文解析のすべてが完了した後、私は私が(XDocumentの残りのXML)を解析しませんでしたXMLをログに記録できるようにしたいです。問題は、XElement.Remove()が呼び出されたときに残る余分な空白があることです。私は、残りのXML形式の残りの部分を維持しながら、この余分な空白を削除するための最良の方法を知ってほしいです。
例/サンプルコード
私はソケットの上に次のXML受け取った場合:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with XML.</description>
</book>
</catalog>
をそして、私はこのXMLを解析し、XElementsの数を削除するには、次のコードを使用します。
private void socket_messageReceived(object sender, MessageReceivedEventArgs e)
{
XDocument xDoc;
try
{
using (MemoryStream xmlStream = new MemoryStream(e.XmlAsBytes))
using (XmlTextReader reader = new XmlTextReader(xmlStream))
{
xDoc = XDocument.Load(reader);
}
XElement Author = xDoc.Root.Descendants("author").FirstOrDefault();
XElement Title = xDoc.Root.Descendants("title").FirstOrDefault();
XElement Genre = xDoc.Root.Descendants("genre").FirstOrDefault();
// Do something with Author, Title, and Genre here...
if (Author != null) Author.Remove();
if (Title != null) Title.Remove();
if (Genre != null) Genre.Remove();
LogUnparsedXML(xDoc.ToString());
}
catch (Exception ex)
{
// Exception Handling here...
}
}
LogUnparsedXMLメッセージに送信されるxmlの結果の文字列は次のようになります。
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with XML.</description>
</book>
</catalog>
これは大きな問題のようには見えないかもしれませんが、私の実際のアプリケーションでは、残ったXMLはかなりかすかなようです。私はSaveOptions列挙型を無駄にするXDocument.ToStringオーバーロードを使用しようとしました。また、SaveOptions列挙型を使ってファイルに保存するようにxDoc.Saveを呼び出そうとしました。私は空白を削除しようとするXElement.Nodes().OfType<XText>()
を使用し、いくつかの異なるLINQクエリを使って実験してみてくださいでしたが、多くの場合、私はを取り除くためにしようとしています空白と一緒に保存したいの空白を取ってしまいました。
ご協力いただきありがとうございます。
ジョー
'ToString()'のオプションを 'SaveOptions.DisableFormatting'に設定してみてください。 –