LINQ to XML XElementノード

c# linq-to-xml xml xmlserializer xsd
LINQ to XML XElementノード

LinqXMLを使用してXMLファイルを作成しています。

string value = "Steet,
  City";
XElement address = new XElement("Address", value);

xmlファイルを作成すると、アドレス値は「Steet、<BR> </BR>」として表示されます。元のように必要なだけです。 (たとえうまく形成されなくても)

  1  1


ベストアンサー

そのようなものが整形式でない場合は、XMLとして扱うことができるとは思わないでください。 したがって、整形式ではないHTMLマークアップをXML要素に配置する場合は、CDATAセクションの使用を検討してください。

    string value = "Steet,
  City";
    XElement address = new XElement("Address", new XCData(value));

結果として

Steet,<BR> </BR> City

値をXMLとして解析する場合は、フラグメントモードのXmlReaderを使用します。

static void Main()
{
    string value = "Steet,
  City";
    XElement address = new XElement("Address", ParseFragment(value));
    Console.WriteLine(address);
}

static IEnumerable ParseFragment(string fragment)
{
    using (StringReader sr = new StringReader(fragment))
    {
        using (XmlReader xr = XmlReader.Create(sr, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment }))
        {
            xr.Read();
            XNode node;
            while (!xr.EOF && (node = XNode.ReadFrom(xr)) != null)
            {
                yield return node;
            }
        }
    }
}

その結果

Steet,
  City

4


何も変える必要はないと思います。 `<`と `>`は、XMLで山括弧をエスケープする方法です。 XMLパーサーは、文字列値を読み取るときにそれらをリテラルの角括弧に自動的に戻します。 CDATAは、山括弧をエスケープする別の方法です。 この場合、両者はまったく同じことを達成します。 元のコードを取得し、「

XMLパーサーを持つノードの場合、返される文字列は「Street、City」になります。 エスケープ方法をCDATAに変更しても、XMLを(おそらく)読みにくくすることを除いて、実際には何も変わりません。

“タグを実際にXMLドキュメントの一部にしたい場合は、ドキュメントの一部にする必要があります。 つまり…​

new XElement("Address", "Street,", new XElement("BR"), " City")

1


保存するにはCDATAでラップする必要があります

0


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