逗号分隔命名空间名称 - 如何使用它?

时间:2014-01-09 09:36:05

标签: vb.net namespaces

我想以这种格式“name1:name2:name3”使用命名空间,但是当我尝试在我的vb类中使用它时

Namespace name1:name2:name3

Partial Public Class Message
End class

End namespave

我收到错误:预期声明。

我无法控制命名空间,因此我无法更改它。

提前致谢!

修改

我使用xsd.exe从xsd自动生成一个类。我使用n开关来设置命名空间。我从提供xsd的组织中获取命名空间,命名空间的形式为“ukm:sst:collection:detail”。我必须在我的类中使用它来从验证的类中获取xml序列化。

我的xml应该是这样的

<?xml version="1.0" encoding="UTF-8" ?> 
<message xmlns="ukm:sst:collection:detail" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:schemaLocation="ukm:sst:collection:detail">

EDIT2

我的课程:

<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929"), _
 System.SerializableAttribute(), _
 System.Diagnostics.DebuggerStepThroughAttribute(), _
 System.ComponentModel.DesignerCategoryAttribute("code"), _
 System.Xml.Serialization.XmlTypeAttribute([Namespace]:="ukm:sst:collection:detail"), _
 System.Xml.Serialization.XmlRootAttribute("melding", [Namespace]:="ukm:sst:collection:detail", IsNullable:=False)> _
Partial Public Class Message

但我的xml缺少xsi:schemaLocation属性

我的xml看起来像:

<?xml version="1.0" encoding="utf-8"?>
<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="ukm:sst:collection:detail">

但xml应如下所示:

<?xml version="1.0" encoding="UTF-8" ?> 
<message xmlns="ukm:sst:collection:detail" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:schemaLocation="ukm:sst:collection:detail test_v2_0.xsd">

我在自动生成的类中有Imports System.Xml.Serialization。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为您将 VB.Net 类命名空间与 Xml 命名空间混淆。这两者不是同一回事。

如果你想在类的Xml输出中使用命名空间,你应该使用XmlRoot属性,并在那里指定命名空间:

<XmlRoot(Namespace:="ukm:sst:collection:detail")>
Public Class Message

End Class

NB:您需要在课程页面中导入System.Xml.Serialization

基于Edit2,为了获取SchemaLocation,您似乎需要向包含它的类添加属性,并使用XmlAttribute指定它(从this回答) :

<XmlRoot(Namespace:="ukm:sst:collection:detail")>
Public Class Message

  <XmlAttribute("schemalocation", Namespace:=XmlSchema.InstanceNamespace)>
  public string SchemaLocation = "ukm:sst:collection:detail test_v2_0.xsd"

End Class

答案 1 :(得分:1)

您不能在VB.NET命名空间中使用逗号(,)或冒号(:)。正如MSDN中所述,Namespace应该是:

  

“标识命名空间的唯一名称。必须是有效的Visual Basic标识符

有效的Visual Basic标识符不得包含此类字符:

  

“它必须只包含字母字符,十进制数字和下划线。” [Reference]