1

我肯定错过了一些东西。我有一个存储 HTML 片段的 XML 文件,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<presentation>
  <slide id="1" title="Test Slide 1">
    <h1>This is test slide 1.</h1>
    <p>Information on test slide.</p>
  </slide>
  <slide id="2" title="Test Slide 2">
    <h2> This is test slide 2.</h2>
    <p>Information on test slide.</p>
  </slide>
  <slide id="3" title="Test Slide 3">
    <h3> This is test slide 3.</h3>
    <p>Information on test slide.</p>
  </slide>
</presentation>

我正在构建一个 ASP.net 表单,它允许我编辑“幻灯片”的内容,然后保存我的更改。为了做到这一点,首先我找到合适的幻灯片id。然后我用 删除幻灯片的所有内容RemoveNodes(),然后尝试用 编写新内容WriteRaw(contents)

    XDocument xmlDoc = XDocument.Load(filepath);
    XElement slide = xmlDoc.Descendants("slide").First(el => el.Attribute("id").Value.Equals(id));
    slide.RemoveNodes();
    using (var writer = slide.CreateWriter())
    {
        // contents are retrieved from a TextBox
        writer.WriteRaw(contents);
    }
    xmlDoc.Save(filepath);

代码运行没有错误。但是,当我检查 xml 文件时,html 标记的<and>字符已转换为&lt;and &gt;

...
  <slide id="1" title="Test Slide 1">&lt;h1&gt;This is test slide 1.&lt;/h1&gt;
&lt;p&gt;Information on test slide.&lt;/p&gt;&gt;</slide>
...

我猜另一个对象正在逃避背景中的角色。SaveOptions.DisableFormatting不会改变行为。谁能指出我正确的方向?

4

1 回答 1

1

抱歉,但 XmlWriter.WriteRaw 适用于写入流或文件的 XmlWriter,但在 System.Xml 或 System.Xml.Linq 中填充对象时不起作用。改为使用slide.Add(XElement.Parse("<dummy>" + contents + "</dummy>").Nodes())

于 2012-06-27T17:37:05.793 回答