如何避免 XmlWriter 创建一个默认的 "xmlns" 空属性?
How to avoid XmlWriter create a default "xmlns" empty attribute?
有这种节点(我们可以在 .vbproj 项目文件中找到):
...
<ItemGroup>
<Import Include="Microsoft.VisualBasic"/>
<Import Include="Microsoft.Win32"/>
<Import Include="Microsoft.Win32.SafeHandles"/>
...
</ItemGroup>
...
我在 class 中用 getter 和 setter 声明了 属性,以获取导入集合,或替换整个节点内容给出一个集合。
嗯,我遇到的问题是,当我尝试替换节点内容时,我的 XmlWriter
实例添加了一个额外的空 xmlns
属性,请参阅此结果示例:
...
<ItemGroup>
<Import Include="Microsoft.VisualBasic" xmlns="" />
<Import Include="Microsoft.Win32" xmlns="" />
<Import Include="Microsoft.Win32.SafeHandles" xmlns="" />
...
</ItemGroup>
...
为什么会发生这种情况,如何避免?
我对字符串替换等非高效解决方案持开放态度(仅在该节点上),但我尝试过但没有成功。
这是我正在使用的相关代码:
Public Property ImportedNamespaces As SortedSet(Of String)
Get
Return New SortedSet(Of String)((From el As XElement In Me.ItemGroups()(1).Elements()
Select el.@Include))
End Get
Set(ByVal value As SortedSet(Of String))
Me.ItemGroups()(1).RemoveAll()
Dim writer As XmlWriter = Me.ItemGroups()(1).CreateWriter
For Each s As String In value
With writer
.WriteStartElement(Nothing, "Import", Nothing)
.WriteAttributeString(Nothing, "Include", Nothing, s)
.WriteEndElement()
End With
Next
writer.Flush()
writer.Close()
' This doesn't works.
' For Each el As XElement In Me.ItemGroups()(1).Elements("Import")
' el.Attribute("xmlns").Remove()
' Next
End Set
End Property
假设你有一个 XElement
那么你可以使用 .WriteStartElement(Nothing, "Import", Me.ItemGroups()(1).Name.NamespaceName)
或者你可能想用
替换整个 XmlWriter
Me.ItemGroups()(1).Add(From s As String In value Select New XElement(Me.ItemGroups()(1).Name.Namespace + "Import", New XAttribute("Include", s)))
有这种节点(我们可以在 .vbproj 项目文件中找到):
...
<ItemGroup>
<Import Include="Microsoft.VisualBasic"/>
<Import Include="Microsoft.Win32"/>
<Import Include="Microsoft.Win32.SafeHandles"/>
...
</ItemGroup>
...
我在 class 中用 getter 和 setter 声明了 属性,以获取导入集合,或替换整个节点内容给出一个集合。
嗯,我遇到的问题是,当我尝试替换节点内容时,我的 XmlWriter
实例添加了一个额外的空 xmlns
属性,请参阅此结果示例:
...
<ItemGroup>
<Import Include="Microsoft.VisualBasic" xmlns="" />
<Import Include="Microsoft.Win32" xmlns="" />
<Import Include="Microsoft.Win32.SafeHandles" xmlns="" />
...
</ItemGroup>
...
为什么会发生这种情况,如何避免?
我对字符串替换等非高效解决方案持开放态度(仅在该节点上),但我尝试过但没有成功。
这是我正在使用的相关代码:
Public Property ImportedNamespaces As SortedSet(Of String)
Get
Return New SortedSet(Of String)((From el As XElement In Me.ItemGroups()(1).Elements()
Select el.@Include))
End Get
Set(ByVal value As SortedSet(Of String))
Me.ItemGroups()(1).RemoveAll()
Dim writer As XmlWriter = Me.ItemGroups()(1).CreateWriter
For Each s As String In value
With writer
.WriteStartElement(Nothing, "Import", Nothing)
.WriteAttributeString(Nothing, "Include", Nothing, s)
.WriteEndElement()
End With
Next
writer.Flush()
writer.Close()
' This doesn't works.
' For Each el As XElement In Me.ItemGroups()(1).Elements("Import")
' el.Attribute("xmlns").Remove()
' Next
End Set
End Property
假设你有一个 XElement
那么你可以使用 .WriteStartElement(Nothing, "Import", Me.ItemGroups()(1).Name.NamespaceName)
或者你可能想用
Me.ItemGroups()(1).Add(From s As String In value Select New XElement(Me.ItemGroups()(1).Name.Namespace + "Import", New XAttribute("Include", s)))