重命名默认xmlns

时间:2016-08-01 09:02:10

标签: xml vb.net

这是我生成的xml文件:

<?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"

更新

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

并且,不要忘记首先声明Xmlns而 root 上没有前缀,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>

它看起来不漂亮吗? &GT;。&LT;

相关问题