我需要复制一个xml标头:
<XDataFeed
xmlns="http://foo.com/namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" .
xsi:schemaLocation="http://foo.com/namespace C:\fooXSD.XML">
用我的代码:
'Export the object to XML
Dim writer As New XmlSerializer(DataFeed.GetType)
Dim ns As New XmlSerializerNamespaces()
ns.Add("xmlns", "http://foo.com/namespace")
ns.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance")
Dim file As New System.IO.StreamWriter("C:\foo.xml")
writer.Serialize(file, DataFeed, ns)
file.Close()
我遇到了两个问题:
当我尝试添加不带foo.com前缀的命名空间时,它将删除所有命名空间。我上面的代码将foo.com的命名空间添加为:
xmlns:xmlns =“ http://foo.com/namespace”
这是不正确的。我如何简单地添加没有前缀的名称空间?
我非常感谢您的协助。我需要让我的XML通过XSD验证通过才能获得批准,这是阻碍我前进的最后一步。
只是自己要做。
不要将您的命名空间添加到中XmlSerializerNamespaces
。相反,只需将其放在父对象上即可。这应该使它没有前缀而只是xmlns="http://..."
。
<XmlRoot(Namespace:="http://foo.com/namespace")>
Public Class XDataFeed
'...
End Class
如果由于某种原因它像一个虚拟前缀那样拍打d1p1
,请string.Empty
为您的前缀使用并继续,然后将您的名称空间添加到XmlSerializerNamespaces
。
为了显示SchemaLocation,您可以创建一个哑属性并相应地对其进行标记:
<XmlAttribute("schemaLocation", NameSpace:=XmlSchema.InstanceNamespace)>
Public Property SchemaLocation As String
Get
Return "http://foo.com/namespace C:\fooXSD.XML"
End Get
Set(value As String)
'Ignore... pureley needed for serialization.
End Set
End Property
您已经添加了xsi
名称空间,因此如果您继续这样做,它应该可以正常工作。只需取出您的xmlns
名称空间。
最后,您应该得到一个这样的类:
<XmlRoot(Namespace:="http://foo.com/namespace")>
Public Class XDataFeed
<XmlAttribute("schemaLocation", NameSpace:=XmlSchema.InstanceNamespace)>
Public Property SchemaLocation As String
Get
Return "http://foo.com/namespace C:\fooXSD.XML"
End Get
Set(value As String)
'Ignore... pureley needed for serialization.
End Set
End Property
End Class
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句