2016-08-01 73 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> 

它不是很漂亮嗎? >。 <