C# LINQ到XML元素节点

C# LINQ到XML元素节点,c#,xml,xsd,linq-to-xml,xmlserializer,C#,Xml,Xsd,Linq To Xml,Xmlserializer,我正在使用LinqXML创建一个XML文件 string value = "Steet,<BR> </BR> City"; XElement address = new XElement("Address", value); string value=“Steet,城市”; XElement地址=新XElement(“地址”,值); 写入xml文件后,地址值显示为Steet,BR>/BR> 我只是需要,因为它是像原来的。(即使格式不好)您需要将其包装在CDAT

我正在使用LinqXML创建一个XML文件

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

城市”; XElement地址=新XElement(“地址”,值);
写入xml文件后,地址值显示为
Steet,BR>/BR>

我只是需要,因为它是像原来的。(即使格式不好)

您需要将其包装在CDATA中以保留它

您需要将其包装在CDATA中以保留它

如果这些内容格式不好,那么不要期望能够将其视为XML。因此,如果您想将未成形的HTML标记放入XML元素中,则考虑使用cDATA部分,例如

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

城市”; XElement地址=新XElement(“地址”,新XCData(值));
这将导致

<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;
            }
        }
    }
}
static void Main()
{
string value=“Steet,

城市”; XElement地址=新的XElement(“地址”,ParseFragment(值)); 控制台写入线(地址); } 静态IEnumerable ParseFragment(字符串片段) { 使用(StringReader sr=新的StringReader(片段)) { 使用(XmlReader xr=XmlReader.Create(sr,新的XmlReaderSettings(){ConformanceLevel=ConformanceLevel.Fragment})) { xr.Read(); XNode节点; 而(!xr.EOF&&(node=XNode.ReadFrom(xr))!=null) { 收益回报节点; } } } }
这导致

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

城市
如果这些东西的格式不好,那么就不要指望能够将其视为XML。因此,如果您想将未成形的HTML标记放入XML元素中,则考虑使用cDATA部分,例如

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

城市”; XElement地址=新XElement(“地址”,新XCData(值));
这将导致

<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;
            }
        }
    }
}
static void Main()
{
string value=“Steet,

城市”; XElement地址=新的XElement(“地址”,ParseFragment(值)); 控制台写入线(地址); } 静态IEnumerable ParseFragment(字符串片段) { 使用(StringReader sr=新的StringReader(片段)) { 使用(XmlReader xr=XmlReader.Create(sr,新的XmlReaderSettings(){ConformanceLevel=ConformanceLevel.Fragment})) { xr.Read(); XNode节点; 而(!xr.EOF&&(node=XNode.ReadFrom(xr))!=null) { 收益回报节点; } } } }
这导致

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

城市
我认为您不需要更改任何内容
是如何在XML中转义尖括号的。当读取字符串值时,XML解析器会自动将它们转换回文字尖括号。CDATA只是另一种摆脱尖括号的方法。在这种情况下,它们都完成了完全相同的任务。如果使用原始代码并使用XML解析器读取
节点的值,则返回的字符串将是
街道,

城市
。将转义方法更改为CDATA实际上不会改变任何东西,只会使XML(可以说)更难阅读

如果希望

标记实际上是XML文档的一部分,那么应该使其成为文档的一部分。也就是说

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

我认为你不需要改变任何事情
是如何在XML中转义尖括号的。当读取字符串值时,XML解析器会自动将它们转换回文字尖括号。CDATA只是另一种摆脱尖括号的方法。在这种情况下,它们都完成了完全相同的任务。如果使用原始代码并使用XML解析器读取
节点的值,则返回的字符串将是
街道,

城市
。将转义方法更改为CDATA实际上不会改变任何东西,只会使XML(可以说)更难阅读

如果希望

标记实际上是XML文档的一部分,那么应该使其成为文档的一部分。也就是说

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

谢谢你,马丁。由于我是新来的,投票只允许我增加1。再次感谢您提供的示例。这实际上在功能上与原始版本相同。不管你是否逃脱了一个
你好,乔,谢谢你的回复。此XML将用于生成PDF文件。所以PDF创建人员希望有标签,这样就可以使用该工具进行映射。例如(
=>PDF换行符)尽管如此,在这种情况下,CDATA的功能仍然与
完全相同。如果希望

标记实际成为XML文档的一部分,请参阅对我的答案的编辑。谢谢Martin。由于我是新来的,投票只允许我增加1。再次感谢您提供的示例。这实际上在功能上与原始版本相同。不管你是否逃脱了一个
你好,乔,谢谢你的回复。此XML将用于生成PDF文件。所以PDF创建人员希望有标签,这样就可以使用该工具进行映射。例如(
=>PDF换行符)尽管如此,在这种情况下,CDATA的功能仍然与
完全相同。如果希望

标记实际上是XML文档的一部分,请参阅对我的答案的编辑。