C# 使用LINQXML和xml编写器读取html,然后将其写入xml文件

C# 使用LINQXML和xml编写器读取html,然后将其写入xml文件,c#,html,xml,linq,C#,Html,Xml,Linq,我正在用将元素文本的值分解成一个字符串,并在文本框中显示该字符串。之后,用户可以使用其他HTML标记对其进行修改。使用linq查询要插入用户输入的确切节点时,html标记中的所有尖括号都被规范化为br/。那么我如何保存我的html标记呢 我已经阅读并尝试了这些问题的解决方案,但未能将其应用到我的用例中: 这是我的xml文件的一个示例: <events> <event id="0"> <content><br/><

我正在用
将元素
文本的
分解成一个字符串,并在
文本框中显示该字符串。之后,用户可以使用其他HTML标记对其进行修改。使用linq查询要插入用户输入的确切节点时,html标记中的所有尖括号都被规范化为
br/
。那么我如何保存我的html标记呢

我已经阅读并尝试了这些问题的解决方案,但未能将其应用到我的用例中:

这是我的xml文件的一个示例:

<events>
    <event id="0">
        <content><br/></content>
    </event>
</events>
如何使用用户输入操作xml文件:

string userinput = "Text with <br /> break"; // This is read from TextBox control inside Form
foreach (var item in nodeToEdit.Elements())
{
    if(item.Name == "content")
    {
        item.Value = userinput;
    }
}
我预期的xml输出文件应如下所示:

<events>
    <event id="0">
        <content>Text with <br /> break</content>
    </event>
</events>
...
<content><![CDATA[Text with <br /> break]]></content>
...

分隔符的文本

很抱歉发了这么长的帖子。

根据您所描述的内容,我想说您在XML文件中使用了错误的格式
根本没有在XML文件中描述新节点,而是将其用作内容的一部分,因此应该对其进行编码。但也就是说,如果必须检索并设置所描述的内容节点,则需要
.InnerXml
,而不是
.Value
。InnerText
替换以下内容:

if(item.Name == "content")
{
    item.Value = userinput;
}
为此:

if(item.Name == "content")
{
    item.ReplaceWith(XElement.Parse("<content>" + userinput + "</content>"));
}
这将生成如下所示的XML:

<events>
    <event id="0">
        <content>Text with <br /> break</content>
    </event>
</events>
...
<content><![CDATA[Text with <br /> break]]></content>
...
。。。
中断]]>
...

在foreach循环中没有InnerXml、文本或InnerText
不打算成为新节点。它是名为内容的节点的一部分。还是我误解了你的意思?通常,内容中偶尔会使用html标记填充大量文本,因为xml文件稍后将由另一个我无法控制的工具处理。我也无法控制如何获得它。是的,关键是通过允许内容中的未替换标记,它们成为自己的节点,这不是您想要的。您必须对它们进行编码,或者将它们放在CDATA区域中。无论是谁在读取XML文件,当他们请求内容部分的文本时,都应该在处理数据之前先删除数据。大多数XML解析器都应该自动执行此操作;我得到了这个错误:
error 1'System.Xml.Linq.XElement.Parse(string,System.Xml.Linq.LoadOptions)'是一个“方法”,但像“类型”一样使用。
。有什么想法吗?对不起,拿出新的。您的预期输出应该是带有br/break的
文本
...
<content><![CDATA[Text with <br /> break]]></content>
...