XML 使用 F# TypeProvider 进行操作

XML manipulation with F# TypeProvider

给定以下 XML 结构:

<?xml version="1.0" encoding="utf-8"?>
<Persons>
  <Person>
    <Name>Person 1</Name>
    <Age>30</Age>
  </Person>
  <Person>
    <Name>Person 2</Name>
    <Age>32</Age>
  </Person>
</Persons>

我想将一个人添加到集合中,我希望可以通过 Xml TypeProvider API.

来完成

我的方法如下:

type PersonXmlProvider = XmlProvider<""".\Persons.xml""">

let personsXml = PersonXmlProvider.GetSample()
personsXml.XElement.Add(new PersonXmlProvider.Person("Person 3", 33))
personsXml.XElement.Save("Persons.xml")

发生了什么: 此人已添加到 xml 集合并写入文件。

意外: 但是编码不正确,因为 XML-标签分别编码为 &lt;&gt; 而不是 < 和 >。

我错过了什么?

文档说 UTF-8 是默认值。

更新

结果XML

<?xml version="1.0" encoding="utf-8"?>
<Persons>
  <Person>
    <Name>Person 1</Name>
    <Age>30</Age>
  </Person>
  <Person>
    <Name>Person 2</Name>
    <Age>32</Age>
  </Person>&lt;Person&gt;
  &lt;Name&gt;Person 3&lt;/Name&gt;
  &lt;Age&gt;33&lt;/Age&gt;
&lt;/Person&gt;
</Persons>

方法XElement.Add(content: obj)接受一个内容对象。

PersonXmlProvider.Person.ToString 将类型序列化为 XML 并将其作为文本节点添加到主文档中。

因此,当它被序列化时,文本节点被转义,您会在输出中看到 XML 个实体。

P.S.

解决办法就是一路用XElement

let person = new PersonXmlProvider.Person("Person 3", 33)
personsXml.XElement.Add(person.XElement)