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-标签分别编码为 <
和 >
而不是 < 和 >。
我错过了什么?
文档说 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><Person>
<Name>Person 3</Name>
<Age>33</Age>
</Person>
</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)
给定以下 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-标签分别编码为 <
和 >
而不是 < 和 >。
我错过了什么?
文档说 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><Person>
<Name>Person 3</Name>
<Age>33</Age>
</Person>
</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)