内联xml文字中的空命名空间 - 如何删除xmlns?

时间:2010-07-31 01:43:48

标签: xml vb.net xsd

我正在尝试使用xml文档来存储电影数据库的数据,但是我遇到了问题,我是新手使用xml进行文档并且已经使用教程和MSDN来解决它但我感谢你提前了

这是我正在使用的代码

Imports <"...\movies.xml">

Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

    Dim movieToAdd As Movie = getMovieInfo()
    MovieBindingSource.AddNew()
    Dim doc = XDocument.Load("..\..\movies.xml")
    Dim movieAdd = (<temp>
                        <Movie>
                            <MovieID><%= movieToAdd.MovieID %></MovieID>
                            <MovieTitle><%= movieToAdd.MovieTitle %></MovieTitle>
                            <Studio><%= movieToAdd.Studio %></Studio>
                            <Director><%= movieToAdd.Direcotor %></Director>
                            <ReleaseYear><%= movieToAdd.ReleaseYear %></ReleaseYear>
                            <Genre><%= movieToAdd.Genre %></Genre>
                            <Rating><%= movieToAdd.Rating %></Rating>
                            <DVD><%= movieToAdd.DVD %></DVD>
                            <BluRay><%= movieToAdd.BluRay %></BluRay>
                            <VHS><%= movieToAdd.VHS %></VHS>
                            <ScreenFormat><%= movieToAdd.ScreenFormat %></ScreenFormat>
                            <MovieCase><%= movieToAdd.MovieCase %></MovieCase>
                            <RunTime><%= movieToAdd.RunTime %></RunTime>
                            <NumberOfDiscs><%= movieToAdd.NumberOfDiscs %></NumberOfDiscs>
                        </Movie>
                    </temp>)
    Try
        Dim addMovie = doc.<movies:Movies>(0)
        addMovie.Add(movieAdd.Nodes())
        doc.Save("..\..\movies.xml")
    Catch ex As Exception
        Throw ex
    End Try
End Sub

Private Function getMovieInfo() As Movie

    Dim movieToAdd As New Movie

    movieToAdd.MovieID = CInt(MovieIDTextBox.Text)
    movieToAdd.MovieTitle = MovieTitleTextBox.Text
    movieToAdd.Studio = StudioTextBox.Text
    movieToAdd.Direcotor = DirecotorTextBox.Text
    movieToAdd.ReleaseYear = ReleaseYearTextBox.Text
    movieToAdd.Genre = GenreComboBox.SelectedText
    movieToAdd.Rating = RatingComboBox.SelectedText
    movieToAdd.ScreenFormat = ScreenFormatComboBox.SelectedText
    movieToAdd.NumberOfDiscs = NumberOfDiscsTextBox.Text
    movieToAdd.RunTime = CInt(RunTimeTextBox.Text)
    movieToAdd.BluRay = CBool(BluRayCheckBox.CheckState)
    movieToAdd.DVD = CBool(DVDCheckBox.CheckState)
    movieToAdd.VHS = CBool(VHSCheckBox.CheckState)
    movieToAdd.MovieCase = CBool(MovieCaseCheckBox.CheckState)

    Return movieToAdd
End Function

Inn xml文件我得到了这个

<Movie xmlns="">
  <MovieID>22</MovieID>
  <MovieTitle>test</MovieTitle>
  <Studio>test</Studio>
  <Director>test</Director>
  <ReleaseYear>2121</ReleaseYear>
  <Genre></Genre>
  <Rating></Rating>
  <DVD>false</DVD>
  <BluRay>false</BluRay>
  <VHS>false</VHS>
  <ScreenFormat></ScreenFormat>
  <MovieCase>false</MovieCase>
  <RunTime>123</RunTime>
  <NumberOfDiscs>2</NumberOfDiscs>
</Movie>

为什么我在电影父节点中获得xmlns = ""

我从movieAdd变量中移除父节点,它将xlmns =放在所有节点中

有谁能告诉我我做错了什么?

3 个答案:

答案 0 :(得分:2)

看起来(虽然你没有分享)电影XML文件使用命名空间。所以我假设在该文件中的某个位置(可能在根元素上),您将拥有类似xmlns =“mymovieurl”的内容。 要认识到的重要一点是每个XML元素和属性都由一对字符串标识。本地名称(Movie,DVD,VHS,...)和名称空间URI(空,mymovieurl,...)。在上面的代码中,由于您没有指定默认命名空间,因此所有元素都在空命名空间中(它们的命名空间URI是空字符串)。 但是你要添加它们的XML文件的元素在一些非空命名空间(mymovieurl)中。 为了保留你要添加的元素的命名空间,代码必须注入xmlns =“”属性,该属性将该元素及其所有子元素标记在空命名空间中(就像在代码中指定的那样)。 / p>

解决方案取决于您想要实现的目标。我假设您要将元素添加到文件的其余部分使用的命名空间中。

一种简单的方法是添加 进口

这意味着代码中没有前缀的所有元素都应属于命名空间“mymovieurl”。 (只需将其更改为电影文件正在使用的任何名称空间URI)。

答案 1 :(得分:1)

Imports就像XML中的名称空间声明一样。由于您没有向我们展示您希望输出XML所在的输入XML或命名空间URI,因此无法显示正确的代码。

假设您的文件使用名称空间URI“mynsuri”,那么您需要添加以下内容:

Imports <xmlns="mynsuri">

这将使代码中未指定前缀的所有元素都属于“mynsuri”。假设您确实希望Movie元素及其子元素属于该命名空间。

也许更明确的方式是:

Imports <xmlns:movie="mynsuri">

然后在您的代码中,您将创建以下元素:

<movie:Movie><movie:MovieID> ...

命名空间声明(xmlns:movie =''属性)将在序列化过程中自动添加到输出中。

答案 2 :(得分:0)

是的我正在使用命名空间,我确实导入了命名空间,我想它只是在这个过程中传输不好,所以我应该在我的代码中做些什么呢?

Imports'&lt;'xmlns:movies =“G:\ Visual Studio 2008 \ Projects \ Movie Catalog \ Movie Catalog \ movies.xml”&gt;

    Dim movieAdd = (<temp>
                        <Movie xmlns="G:\Visual Studio 2008\Projects\Movie Catalog\Movie Catalog\movies.xml">
                            <MovieID><%= movieToAdd.MovieID %></MovieID>
                            <MovieTitle><%= movieToAdd.MovieTitle %></MovieTitle>
                            <Studio><%= movieToAdd.Studio %></Studio>
                            <Director><%= movieToAdd.Direcotor %></Director>
                            <ReleaseYear><%= movieToAdd.ReleaseYear %></ReleaseYear>
                            <Genre><%= movieToAdd.Genre %></Genre>
                            <Rating><%= movieToAdd.Rating %></Rating>
                            <DVD><%= movieToAdd.DVD %></DVD>
                            <BluRay><%= movieToAdd.BluRay %></BluRay>
                            <VHS><%= movieToAdd.VHS %></VHS>
                            <ScreenFormat><%= movieToAdd.ScreenFormat %></ScreenFormat>
                            <MovieCase><%= movieToAdd.MovieCase %></MovieCase>
                            <RunTime><%= movieToAdd.RunTime %></RunTime>
                            <NumberOfDiscs><%= movieToAdd.NumberOfDiscs %></NumberOfDiscs>
                        </Movie>
                    </temp>)