我在使用.net XMLSerializer对象和XML命名空间时遇到了问题。我对XMLSerializer的体验非常有限,我之前没有使用过XML。我正在尝试以下内容:
<Record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Property1>blah</Property1>
<oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/">>
<dc:Property2>asdsd</dc:Property2>
<dc:Property3>asdasasdda</dc:Property3>
</oai_dc:dc>
</Record>
然而,我现在能得到的最好的是(注意名称空间声明的位置)
<Record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<Property1>blah</Property1>
<oai_dc:dc>
<dc:Property2>asdsd</dc:Property2>
<dc:Property3>asdasasdda</dc:Property3>
</oai_dc:dc>
</Record>
命名空间在根元素中声明,而不是在我想要的dc元素上声明。我理解,要么在根中声明命名空间,要么使用命名空间的元素应该是可接受的。
我正在附加XMLSerializerNamespaces,如下所示:
Dim XMLNamespaces As New XmlSerializerNamespaces()
XMLNamespaces.Add("oai_dc", "http://www.openarchives.org/OAI/2.0/oai_dc/")
XMLNamespaces.Add("dc", "http://purl.org/dc/elements/1.1/")
XMLNamespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance")
XMLSerializer.Serialize(XMLWriter, inputObject, XMLNamespaces)
我正在使用的对象如下所示:
<XmlRoot("Record")> _
Public Class Record
<XmlElement("Property1")> _
Public Property1 As String
<XmlElement("dc", Namespace:="http://www.openarchives.org/OAI/2.0/oai_dc/")> _
Public DCMetadata As DublinCore
Public Sub New()
DCMetadata = New DublinCore()
End Sub
End Class
<XmlRoot("dc", Namespace:="http://www.openarchives.org/OAI/2.0/oai_dc/")> _
Public Class DublinCore
<XmlElement("Property2", Namespace:="http://purl.org/dc/elements/1.1/")> _
Public Property2 As String
<XmlElement("Property3", Namespace:="http://purl.org/dc/elements/1.1/")> _
Public Property3 As String
Public Sub New()
End Sub
End Class
有没有办法强制XMLSerializer针对树下面的元素输出命名空间声明?
感谢您提供任何意见,
安迪
答案 0 :(得分:0)
虽然我现在认为现有的解决方案对我的要求有效,但有一种方法可以实现我的需要。
在要序列化的类中声明一个XmlSerializerNamespaces对象。
<XmlNamespaceDeclarations()> _
Public xmlns As XmlSerializerNamespaces
然后将名称空间添加到此集合中,而不是直接将其附加到序列化程序。这具有声明使用它的命名空间所需的效果。
xmlns = New XmlSerializerNamespaces()
xmlns.Add("oai_dc", "http://www.openarchives.org/OAI/2.0/oai_dc/")
xmlns.Add("dc", "http://purl.org/dc/elements/1.1/")
xmlns.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance")
安德鲁