我需要制作一个XML文件 - 合作伙伴对标题很贴切.显然,标题必须是这样的:
<?xml version="1.0"?>
Run Code Online (Sandbox Code Playgroud)
但每当我创建一个XML文件时,我都会得到如下无关的属性:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)
我的黑客想要停止使用XMLWriter来制作文件,以便我可以更好地控制标题; "没问题,我只是编写一个循环,将自己的XML标记作为StreamWriter或其他东西,忘记这个XMLWriter对象......"但我必须承认,到目前为止,XMLWriter的使用相当优雅; 肯定有一些东西,我可以更改XMLWriterSettings对象,说"停止将自定义属性放入XML标题",对吧?
这是相关的VB代码:
Dim settings As New XmlWriterSettings()
settings.Indent = True
settings.IndentChars = " "
settings.NewLineChars = "\n"
Using writer As XmlWriter = XmlWriter.Create(strFileName, settings)
writer.WriteStartDocument(True)
For Each kvp As KeyValuePair(Of String, String) In dictArguments
Dim key As String = kvp.Key
Dim value As String = kvp.Value
writer.WriteStartElement(key)
writer.WriteString(value)
writer.WriteEndElement()
Next
End Using
Run Code Online (Sandbox Code Playgroud)
工作完美; 但我找不到控制标题的方法.我当然可以找到一种完全删除它的方法,但这不是我们想要做的.
编辑:谢谢你的帮助; 到目前为止,一旦我们删除了WriteStartDocument,它现在不再显示standalone = yes.但我不能让它停止添加编码.有任何想法吗?
Dan*_*ard 10
这样做的一种方法是使用WriteProcessingInstruction方法自己控制初始处理指令:
Dim settings As New XmlWriterSettings()
settings.Indent = True
settings.IndentChars = " "
Using writer As XmlWriter = XmlWriter.Create(strFileName, settings)
writer.WriteProcessingInstruction("xml", "version='1.0'")
writer.WriteStartElement("root")
For Each kvp As KeyValuePair(Of String, String) In dictArguments
Dim key As String = kvp.Key
Dim value As String = kvp.Value
writer.WriteStartElement(key)
writer.WriteString(value)
writer.WriteEndElement()
Next
writer.WriteEndElement()
End Using
Run Code Online (Sandbox Code Playgroud)
请注意,我还添加了一个"root"元素,以防你的字典包含多个元素(我猜测没有字典键值是"root":)