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>
...