Avatar billede jpi Mester
20. juni 2022 - 14:01 Der er 3 kommentarer og
1 løsning

XML prefix

Hej

Jeg har følgende XML-kode som jeg har problemer med at læse:


Udsnit af XML:
<message:AIXMBasicMessage gml:id="uniqueId">
    <message:hasMember xlink:type="simple">
        <aixm:VerticalStructure gml:id="uuid.00255605-c6b2-475b-837f-3cc1a5fb7b6e">
    .....
    </aixm:VerticalStructure>
    </message:hasMember>
</message:AIXMBasicMessage>

Jeg har disse klasser:


<XmlRoot(ElementName:="hasMember")>
Public Class HasMember
    <XmlElement(ElementName:="VerticalStructure")>
    Public Property VerticalStructure As VerticalStructure
    <XmlAttribute(AttributeName:="type")>
    Public Property Type As String
    <XmlText>
    Public Property Text As String
End Class

<XmlRoot(ElementName:="AIXMBasicMessage")>
Public Class AIXMBasicMessage
    <XmlElement(ElementName:="hasMember")>
    Public Property HasMember As List(Of HasMember)
End Class

<XmlRoot(ElementName:="Root")>
Public Class Root
    <XmlElement(ElementName:="AIXMBasicMessage")>
    Public Property AIXMBasicMessage As AIXMBasicMessage
    <XmlAttribute(AttributeName:="message")>
    Public Property Message As String
    <XmlAttribute(AttributeName:="xlink")>
    Public Property Xlink As String
    <XmlAttribute(AttributeName:="aixm")>
    Public Property Aixm As String
    <XmlAttribute(AttributeName:="gml")>
    Public Property Gml As String
    <XmlText>
    Public Property Text As String
End Class


Problemet ligger i message: / aixm: / xlink: / gml:  for hvis jeg fjerner disse, virker det.
Men hvordan skal koden være, så jeg ikke skal fjerne noget i xmlfilen?
Avatar billede arne_v Ekspert
20. juni 2022 - 19:46 #1
XmlRoot, XmlElement og XmlAttribute attributterne har alle an property Namespace.

Er det ikke bare at klaskde den på alle de steder hvor der er brug for det?
Avatar billede jpi Mester
21. juni 2022 - 10:23 #2
Jeg har forsøgt med dette og andre afarter af samme uden resultat for xlink:type:
den fejler stadig ved "xlink:type" i XML-filen

<XmlRoot(ElementName:="hasMember")>
Public Class HasMember
    <XmlElement(ElementName:="VerticalStructure")>
    Public Property VerticalStructure As VerticalStructure
    <XmlAttribute(AttributeName:="type", namespace:="xlink")>
    Public Property Type As String
    <XmlText>
    Public Property Text As String
...
End Class
Avatar billede jpi Mester
21. juni 2022 - 12:36 #3
Har fået det til at virke:

<XmlRoot(ElementName:="hasMember", [Namespace]:="http://www.aixm.aero/schema/5.1/message")>
Public Class HasMember
    <XmlElement(ElementName:="VerticalStructure", [Namespace]:="http://www.aixm.aero/schema/5.1")>
    Public Property VerticalStructure As VerticalStructure
    <XmlAttribute(AttributeName:="type", [Namespace]:="http://www.w3.org/1999/xlink")>
    Public Property Type As String
...
Avatar billede arne_v Ekspert
22. juni 2022 - 03:12 #4
Prefix er bare en referance til et namespace og har i sig selv ikke nogen betydning.


Imports System
Imports System.IO
Imports System.Xml

Namespace E
    Public Class Program
        Private Shared Sub Test(s As String)
            Console.WriteLine(s)
            Dim xr As XmlReader = New XmlTextReader(New StringReader(s))
            While xr.Read()
                If xr.NodeType = XmlNodeType.Element Then
                    Console.WriteLine("{0} {1}", xr.NamespaceURI, xr.LocalName)
                End If
            End While
        End Sub
        Public Shared Sub Main(args As String())
            Test("<foo:a xmlns:foo='http://test'><foo:b>123</foo:b><foo:c>ABC</foo:c></foo:a>")
            Test("<bar:a xmlns:bar='http://test'><bar:b>123</bar:b><bar:c>ABC</bar:c></bar:a>")
            Test("<a xmlns='http://test'><b>123</b><c>ABC</c></a>")
            Console.ReadKey()
        End Sub
    End Class
End Namespace


udskriver:

<foo:a xmlns:foo='http://test'><foo:b>123</foo:b><foo:c>ABC</foo:c></foo:a>
http://test a
http://test b
http://test c
<bar:a xmlns:bar='http://test'><bar:b>123</bar:b><bar:c>ABC</bar:c></bar:a>
http://test a
http://test b
http://test c
<a xmlns='http://test'><b>123</b><c>ABC</c></a>
http://test a
http://test b
http://test c
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester