【问题标题】:Comma separating namespace name - how to use it?逗号分隔命名空间名称 - 如何使用它?
【发布时间】:2014-01-09 09:36:05
【问题描述】:

我想使用这种格式“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。

我做错了什么?

【问题讨论】:

标签: vb.net namespaces


【解决方案1】:

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

如果您想在类的 Xml 输出中使用命名空间,则应使用 XmlRoot 属性,并在其中指定命名空间:

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

End Class

注意:您需要在课程页面中导入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

【讨论】:

  • 用(明显的)解决方案更新了答案
  • 再次感谢!!这就是我一直在寻找的答案!但是让我感到困惑的是vb文件是自动生成的,我相信所有的信息都是从xsd提供的,vb代码花瓶是从中生成的。不建议更改 autogen vb 文件,因此是否可以将您提供的代码放在可能的类消息的局部扩展文件中?
  • 可能,是的。试试看。只需在相同的命名空间和程序集中创建一个部分类。
  • 再次感谢您的帮助!!这是解决方案,将其放入部分扩展文件中效果很好。
【解决方案2】:

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

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

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

"它只能包含字母字符、十进制数字和下划线。" [Reference]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多