【解決方法】子ノードを削除しても値を保持するにはどうすればよいですか?


こんにちは!

XML には次のような要素があります。

<p>This is a paragraph. < b >This is a bold tag.< /b > < b >This is another bold tag.< /b > < i >This is an italic tag.< /i ></p>.

私の出力は次のようになります。

<p>This is a paragraph. This is a bold tag. This is another bold tag. This is an italic tag.</p>

私が得ている出力:

<p>This is a paragraph.This is a bold tag.This is another bold tag.This is an italic tag.</p>

内部のすべての値

タグが連結されており、タグの末尾のスペースが欠落しています。

内部ノードを削除し、スペースを含む値を保持する方法はありますか? それとも、スペースなしでこの連結を防ぐ方法はありますか?

値はメイン XML のとおりである必要があります。

助けてください。

よろしく

私が試したこと:

C#
XDocument xdoc = XDocument.Load("XMLFile.xml");
.
.
.
xdoc.Element("p").Value;

値を取得するコードを記述しました。 質問で要求されている値について、ここでどのような変更を加える必要があるのか​​教えてください。

解決策 1

入力が有効な XML であると仮定すると (提供した例とは異なり)、これは次のコードで実行できます。

XDocument doc = XDocument.Parse(
    "<p>This is a paragraph. <b>This is a bold tag.</b> <b>This is another bold tag.</b> <i>This is an italic tag.</i></p>",
    LoadOptions.PreserveWhitespace
);
		
string valueWithoutXmlElements = doc.Root.Value;
doc.Root.SetValue(valueWithoutXmlElements);
		
string valueWithRootXmlElement = doc.Root.ToString();
		
Console.WriteLine(valueWithRootXmlElement);

具体的には、タグ名内のスペースを削除する必要がありました(つまり、 の代わりに など)。 XML ではルート ノードの外側にテキストを含めることができないため、末尾の句読点も削除しました。 無効な XML をサポートする必要がある場合、適切な XML 構文 (XmlReader、XDocument、XmlDocument など) を使用して XML を操作することはできませんが、既に提案されているように正規表現などを使用する必要があります。

あなたが見逃していた主なトリックはフラグです。

LoadOptions.PreserveWhitespace

これは、空白のみのテキスト ノードを保持するように XML パーサーに指示します (つまり、XML 要素タグ間のスペース、つまりテキスト内およびテキストの周囲のスペースは常に保持されます)。

値を「それ自体で」更新し、ToString() を呼び出して XML を取得するのは少し見苦しいですが、自分でノード操作を行わなくても、必要な結果が得られます。

XDocument.Parse を使用して例を 1 つのファイルに保存します。XDocument.Load を使用するときに LoadOptions を指定することもできます。

コメント

タイトルとURLをコピーしました