Click here to Skip to main content
15,893,668 members
Please Sign up or sign in to vote.
5.00/5 (1 vote)
See more:
VB
Imports Keyboard.My
Imports Microsoft.VisualBasic.CompilerServices
Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Runtime.InteropServices
Imports System.Xml

Namespace Keyboard
    Public Class clsLayouts
        ' Methods
        Public Sub Init(ByVal Path As String)
            Dim settings As New XmlReaderSettings With { _
                .CheckCharacters = True, _
                .CloseInput = True _
            }

            Using reader As XmlReader = XmlReader.Create(Path, settings)
                Try
                    reader.ReadStartElement("KeyLayout")
                    Me.Name = reader.ReadElementString("Name")
                    reader.ReadStartElement("Shortcut")
                    Me.Shortcut.Alt = Conversions.ToBoolean(reader.ReadElementString("Alt"))
                    Me.Shortcut.Ctrl = Conversions.ToBoolean(reader.ReadElementString("Ctrl"))
                    Me.Shortcut.KeyCode = Conversions.ToInteger(reader.ReadElementString("KeyCode"))
                    reader.ReadEndElement()
                    reader.ReadStartElement("Keys")
                    Do
                        Dim list As New ArrayList
                        If ((reader.NodeType = XmlNodeType.Element) Or (reader.NodeType = XmlNodeType.Attribute)) Then
                            Dim key As Integer = Conversions.ToInteger(reader.GetAttribute("KeyCode"))
                            list.Add(reader.GetAttribute("Normal_Option"))
                            list.Add(reader.GetAttribute("Shift_Option"))
                            reader.Read()
                            list.Insert(, reader.ReadElementString("Normal"))
                            list.Insert(, reader.ReadElementString("Shift"))
                            Me.Key.Add(key, list)
                        End If
                        reader.Read()
                    Loop While (reader.Name <> "Keys")
                    reader.ReadEndElement()

                    reader.ReadStartElement("Juks")
                    Do
                        If (reader.NodeType = XmlNodeType.Element) Then
                            reader.Read()
                            Dim str As String = reader.ReadElementString("Seq")
                            Dim str As String = reader.ReadElementString("Out")
                            Me.Juk.Add(str, str)
                        End If
                        reader.Read()
                    Loop While (reader.Name <> "Juks")
                Catch exception As Exception
                    ProjectData.SetProjectError(exception)
                    Dim exception As Exception = exception
                    ProjectData.ClearProjectError()
                Finally
                    reader.Close()
                End Try
            End Using
        End Sub

        Public Sub Update()
            Me.Key.Clear
            Me.Juk.Clear
            Dim settings As New XmlReaderSettings With { _
                .CheckCharacters = True, _
                .CloseInput = True _
            }

            Using reader As XmlReader = XmlReader.Create(Me.Path, settings)
                Try
                    reader.ReadStartElement("KeyLayout")
                    Me.Name = reader.ReadElementString("Name")
                    reader.ReadStartElement("Shortcut")
                    Me.Shortcut.Alt = Conversions.ToBoolean(reader.ReadElementString("Alt"))
                    Me.Shortcut.Ctrl = Conversions.ToBoolean(reader.ReadElementString("Ctrl"))
                    Me.Shortcut.Shift = Conversions.ToBoolean(reader.ReadElementString("Shift"))
                    Me.Shortcut.KeyCode = Conversions.ToInteger(reader.ReadElementString("KeyCode"))
                    reader.ReadEndElement()
                    reader.ReadStartElement("Keys")
                    Do
                        Dim list As New ArrayList
                        If ((reader.NodeType = XmlNodeType.Element) Or (reader.NodeType = XmlNodeType.Attribute)) Then
                            Dim key As Integer = Conversions.ToInteger(reader.GetAttribute("KeyCode"))
                            list.Add(reader.GetAttribute("Normal_Option"))
                            list.Add(reader.GetAttribute("Shift_Option"))
                            reader.Read()
                            list.Insert(, reader.ReadElementString("Normal"))
                            list.Insert(, reader.ReadElementString("Shift"))
                            Me.Key.Add(key, list)
                        End If
                        reader.Read()
                    Loop While (reader.Name <> "Keys")
                    reader.ReadEndElement()
                    reader.ReadStartElement("Juks")
                    Do
                        If (reader.NodeType = XmlNodeType.Element) Then
                            reader.Read()
                            Dim str As String = reader.ReadElementString("Seq")
                            Dim str As String = reader.ReadElementString("Out")
                            Me.Juk.Add(str, str)
                        End If
                        reader.Read()
                    Loop While (reader.Name <> "Juks")
                Catch exception As Exception
                    ProjectData.SetProjectError(exception)
                    Dim exception As Exception = exception
                    ProjectData.ClearProjectError()
                Finally
                    reader.Close()
                End Try
            End Using
        End Sub


        ' Fields
        Public IconName As String
        Public ID As Integer
        Public Juk As Dictionary(Of String, String) = New Dictionary(Of String, String)
        Public Key As Dictionary(Of Integer, ArrayList) = New Dictionary(Of Integer, ArrayList)
        Public Name As String
        Public Path As String
        Public Shortcut As LayoutShortcut

        ' Nested Types
        <StructLayout(LayoutKind.Sequential)> _
        Public Structure LayoutShortcut
            Public Alt As Boolean
            Public Ctrl As Boolean
            Public Shift As Boolean
            Public KeyCode As Integer
        End Structure
    End Class
End Namespace



In My layout i have two Part
One Is :

XML
<Keys>
.......
.....
</Keys>

and
<Juks>
......
.....
</Juks>


More clear :
In XML File Is look like this :
XML
<Keys>
<Key KeyCode="32">
<Normal> </Normal>
<Shift> </Shift>

<Key KeyCode="222">
<Normal>1</Normal>
<Shift>2</Shift>

<Key KeyCode="220">
<Normal>3</Normal>
<Shift>4</Shift>
</Keys>
<Juks>
<Juk>
<Seq>3</Seq>
<Out>25</Out>
</Juk>
<Juk>
<Seq>0</Seq>
<Out>1</Out>
</Juk>
</Juks>

etc etc....


these two part load from a selected *.XML file.
But i want something that load <Juks></Juks> section load from another file.Not My Selected XML file.
It will load from a common XML File. Such As : Juks.XML

Is this possible ?
Posted
Updated 12-Dec-13 23:05pm
v2
Comments
CHill60 13-Dec-13 5:07am    
Are you saying that you want to merge the contents of your selected XML file with additional information that is held in the common xml file?
expert-programmer 13-Dec-13 8:51am    
Yes ! How did you catch the right point! thats what reallu i want.

However could you pls kindly help me?

Thanks
CHill60 13-Dec-13 11:17am    
I see Manfred has beaten me to it! Good luck
expert-programmer 13-Dec-13 12:36pm    
Thanks for comment.
Its but how do i use this code for me?
I am not understanding.

Could u pls tell me the way? Or write a line for me?

1 solution

I looks as if you want to include some xml found in one file into another xml file.
If that is the case then you should check out XInclude in this MSDN article: Combining XML Documents with XInclude[^].

Regards,
— Manfred
 
Share this answer
 
Comments
TnTinMn 13-Dec-13 13:49pm    
+5 Thanks, I learned something new. :)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900