LINQ to XML XElement节点

时间:2011-01-27 18:09:04

标签: c# xml xsd linq-to-xml xmlserializer

我正在使用LinqXML创建XML文件。

string value = "Steet,<BR> </BR> City";
XElement address = new XElement("Address", value);

编写xml文件后,地址值显示为Steet,&lt;BR&gt &lt;/BR&gt 我只是需要,就像它是原始的。 (即使形成不好)

3 个答案:

答案 0 :(得分:4)

如果那些东西形式不好,那么不要指望它能够把它当作XML。因此,如果您希望将格式不正确的HTML标记放入XML元素中,请考虑使用CDATA部分,例如。

    string value = "Steet,<BR> </BR> City";
    XElement address = new XElement("Address", new XCData(value));

将导致

<Address><![CDATA[Steet,<BR> </BR> City]]></Address>

如果要将值解析为XML,则使用片段模式的XmlReader进行解析,例如

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

static IEnumerable<XNode> 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;
            }
        }
    }
}

导致

<Address>Steet,<BR> </BR> City</Address>

答案 1 :(得分:1)

我认为你不需要改变任何东西。 &lt;&gt;是如何在XML中转义尖括号。在解析字符串值时,XML解析器会自动将它们转换回文字尖括号。 CDATA只是逃避尖括号的另一种方式。在这种情况下,他们都完成了同样的事情。如果您使用原始代码并使用XML解析器读取<Address>节点的值,则返回的字符串将为Street,<BR> </BR> City。更改转义为CDATA的方法实际上并没有改变任何东西,除了让你的XML(可以说)更难阅读。

如果您希望<BR />标记实际上是XML文档的一部分,那么您应该将其作为文档的一部分。那就是说......

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

答案 2 :(得分:0)

你需要将它包装在CDATA中以保存它