2016-08-01 75 views
0

这是我生成的XML文件:重命名默认的xmlns

<?xml version="1.0" encoding="utf-8"?> 
<!--This document are generated by Apps. Please dont change any listed data here.--> 
<q1:FilePenting xmlns:ksd="https://nerd.kekesed.id/xmlns/generic/v1" xmlns:q1="https://nerd.kekesed.id/xmlns/installer"> 
<q1:Perpustakaan> 
    <ksd:File PerluBanget="false">Ganteng</ksd:File> 
    <ksd:File PerluBanget="false">Ganteng2</ksd:File> 
</q1:Perpustakaan> 
</q1:FilePenting> 

,我想删除q1的东西,它真的很烦人T^T

这里是我的类:

<XmlRoot("FilePenting", Namespace:="https://nerd.kekesed.id/xmlns/installer")> _ 
Public Class RequiredFiles 
    <XmlArray("Perpustakaan"), _ 
    XmlArrayItem("File", Namespace:="https://nerd.kekesed.id/xmlns/generic/v1")> _ 
    Public Libs() As Berkas 

    <XmlNamespaceDeclarations()> _ 
    Public xmlns As New XmlSerializerNamespaces 

    Sub New() 
     xmlns.Add("ksd", "https://nerd.kekesed.id/xmlns/generic/v1") 
    End Sub 
End Class 

Public Class Berkas 
    <XmlText()> _ 
    Public NamaFile As String 

    <XmlAttribute("version", namespace:="https://nerd.kekesed.id/xmlns/generic/v1")> _ 
    Public VersiFile As String 

    <XmlAttribute("PerluBanget")> _ 
    Public PerluBanget As Boolean = False 

    Sub New() 

    End Sub 
End Class 

这是串行器代码:

Private Sub Button_Click(sender As Object, e As RoutedEventArgs) 
    Dim FileBrow As New Microsoft.Win32.SaveFileDialog 
    With FileBrow 
     .Title = "Init XML Save File" 
     .Filter = "XML File (*.xml)|*.xml" 

     .ShowDialog() 
     If Not .FileName Is Nothing Then 
      'mulai bikin objek dan save dan lain lain lain lain 
      Dim x As New IsiSetup.RequiredFiles() 
      x.Libs = {New Berkas() With {.NamaFile = "Ganteng"}, New Berkas() With {.NamaFile = "Ganteng2"}} 

      Dim Aturannya As New XmlWriterSettings() With {.Indent = True, .IndentChars = " ", .NewLineChars = vbNewLine} 

      Dim penulis As New XmlSerializer(x.GetType) 
      Dim Xmlnya As XmlWriter = XmlWriter.Create(.FileName, Aturannya) 
      Xmlnya.WriteComment("This document are generated by Apps. Please dont change any listed data here.") 

      Dim Ns As New XmlSerializerNamespaces() 
      Ns.Add("", "") 

      penulis.Serialize(Xmlnya, x, Ns) 
      'done 

      Xmlnya.Close() 
     End If 
    End With 
End Sub 

我想删除默认的xmlns像w3c等东西,并将默认的xmlns添加到根。

如何做不用q1命名为xmlns?我的意思是,我希望它是xmlns="https://nerd.kekesed.id/xmlns/installer"

更新

我不希望它从外部类中声明。因为我想在很多项目中声明它,所以在课堂外宣布并不是一个干净的解决方案。

谢谢!

+0

尝试设置'Ns.Add(“”,“https://nerd.kekesed.id/xmlns/installer”)'。 –

+0

啊,我忘了提及我不希望它在课堂外宣布。每次我需要申报课程时,它都不会不变。 – Kekesed

+0

你为什么在乎使用什么前缀?它不会更改文件的*信息内容*。 –

回答

1

通过在序列化时添加类的Xmlns来解决。

penulis.Serialize(Xmlnya, x, x.xmlns) 

而且,不要忘了,没有前缀的首先声明的xmlns和XmlNamespaceDeclarations()

<XmlRoot("FilePenting", Namespace:="https://nerd.kekesed.id/xmlns/installer")> _ 
Public Class RequiredFiles 

    <XmlArray("Perpustakaan"), _ 
    XmlArrayItem("File", Namespace:="https://nerd.kekesed.id/xmlns/generic/v1")> _ 
    Public Libs() As Berkas 

    <XmlElement("Provider")> _ 
    Public Vendor As Provider 

    <XmlNamespaceDeclarations()> _ 
    Public xmlns As New XmlSerializerNamespaces 

    Sub New() 
     xmlns.Add("", "https://nerd.kekesed.id/xmlns/installer") 
     xmlns.Add("ksd", "https://nerd.kekesed.id/xmlns/generic/v1") 
    End Sub 
End Class 

,这就是我想要的样子:3

<?xml version="1.0" encoding="utf-8"?> 
<!--This document are generated by Apps. Please dont change any listed data here.--> 
<FilePenting xmlns:ksd="https://nerd.kekesed.id/xmlns/generic/v1" xmlns="https://nerd.kekesed.id/xmlns/installer"> 
    <Perpustakaan> 
    <ksd:File PerluBanget="false" Tipe="Liblari">Ganteng</ksd:File> 
    <ksd:File PerluBanget="false" Tipe="Liblari">Ganteng2</ksd:File> 
    </Perpustakaan> 
</FilePenting> 

它不是很漂亮吗? >。 <