gpt4 book ai didi

xml - 我如何构建命名空间 xmlns、xmlns :xsi, 和架构 xsi :schemalocaton in my XML via VB.net?

转载 作者:行者123 更新时间:2023-12-04 16:57:41 29 4
gpt4 key购买 nike

我需要复制一个 xml header :

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

  • 这是不正确的。如何在没有前缀的情况下简单地添加命名空间?
  • 我搜索了一个小时试图弄清楚如何将属性“xsi:schemaLocation...”附加到我的 xml 中,尽管我发现的每个示例都使用 c# 中的类型,或者对声明的 xml 文档进行操作,这些文档不适用于我的 VB.Net XmlSerializer 方法。我如何通过上面的 XmlSerializer 代码将 schemaLocation 属性附加到我的 xml?

  • 我非常感谢您的帮助。我需要让我的 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

    关于xml - 我如何构建命名空间 xmlns、xmlns :xsi, 和架构 xsi :schemalocaton in my XML via VB.net?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29397117/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com