XML lesen

  • VB.NET

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von homes22.

    Hallo

    ich habe nun schon so einiges versucht nun muss ich mal fragen ??
    nicht schlagen wenn ich hier aufm holz weg bin.
    die xml ist noch um einiges länger habe nur mal den wichtigen teil herausgenommen

    XML-Quellcode

    1. <modelExtract>
    2. <header>
    3. <modelFilename>C:\Users\xxxxxx</modelFilename>
    4. <modelUnits>
    5. <length unit="3" precision="2" representation="3"/>
    6. <area unit="3005" precision="203" representation="3003"/>
    7. <angle unit="2006" precision="80" representation="2006"/>
    8. <weight unit="1002" precision="112" representation="1009"/>
    9. </modelUnits>
    10. <extractUnits>
    11. <length unit="3" precision="4" representation="3"/>
    12. <area unit="-1" precision="-1" representation="-1"/>
    13. <angle unit="2006" precision="84" representation="2006"/>
    14. <weight unit="1009" precision="112" representation="1009"/>
    15. </extractUnits>
    16. <project>
    17. <name>xxxxxx</name>
    18. <number>192_2015</number>
    19. <client>xxxxx</client>
    20. <buildingLocation>xxxxx</buildingLocation>
    21. <contractor>xxxxx</contractor>
    22. <dateOrder>08.05.2015</dateOrder>
    23. <designer>xxxxx</designer>
    24. <dateConstruction>08.05.2015</dateConstruction>
    25. <detailer>xxxxxx</detailer>
    26. </project>
    27. <extractId>MyModel.ModelExtracts.Key</extractId>
    28. <updateIndex id="MyModel.ModelExtracts.State"/>
    29. </header>
    30. <parts>
    31. <assembly name="Tor Achse O">
    32. <mainpart id="819B0" num="20" quantity="1">
    33. <explicitQuantity>1</explicitQuantity>
    34. <proxy id="8192A" ACADID="8192B" basepart="26B8F">
    35. <assemblyWeight>3950.36</assemblyWeight>
    36. <assemblyExactWeight>3898.36</assemblyExactWeight>
    37. <collisionSize x="218.000" y="130.250" z="86.246"/>
    38. <singlepart id="82363" num="20" quantity="1">
    39. <explicitQuantity>1</explicitQuantity>
    40. <part id="26B8F" name="BL15x218x85" class="Plate" ACADID="16DD8" dstvName="BL 15">
    41. <explicitQuantity>1</explicitQuantity>
    42. <role key="T-plate" name="T-Bleche"/>
    43. <length>218.000</length>
    44. <paintArea>46148.247</paintArea>
    45. <numHoles>2</numHoles>
    46. <material key="S235JR" name="S235JR"/>
    47. <weight>2181.81</weight>
    48. <exactWeight>2127.85</exactWeight>
    49. <thickness>15.000</thickness>
    50. <width>84.996</width>
    51. <area1>18529.180</area1>
    52. <area2>18529.180</area2>
    53. <contourLength>605.992</contourLength>
    54. <ElementID>6229</ElementID>
    55. </part>
    56. </singlepart>
    57. <singlepart id="8235F" num="1047" quantity="1">
    58. <explicitQuantity>1</explicitQuantity>
    59. <part id="26B88" name="BL10x204x115.3" class="Plate" ACADID="16DDA" dstvName="BL 10">
    60. <explicitQuantity>1</explicitQuantity>
    61. <role key="Stiffener#1" name="Steife"/>
    62. <length>204.000</length>
    63. <paintArea>51228.903</paintArea>
    64. <material key="S235JR" name="S235JR"/>
    65. <weight>1768.55</weight>
    66. <exactWeight>1770.51</exactWeight>
    67. <thickness>10.000</thickness>
    68. <width>115.250</width>
    69. <area1>22529.252</area1>
    70. <area2>22529.252</area2>
    71. <contourLength>617.040</contourLength>
    72. <ElementID>6230</ElementID>
    73. </part>
    74. </singlepart>
    75. </proxy>
    76. </mainpart>
    77. <mainpart id="819A5" num="9" quantity="1">
    78. <explicitQuantity>1</explicitQuantity>
    79. <proxy id="8192C" ACADID="8192D" basepart="7ECC8">
    80. <assemblyWeight>93393.09</assemblyWeight>
    81. <assemblyExactWeight>93233.65</assemblyExactWeight>
    82. <collisionSize x="2692.682" y="240.000" z="85.000"/>
    83. <singlepart id="819B6" num="9" quantity="1">
    84. <explicitQuantity>1</explicitQuantity>
    85. <part id="7ECC8" name="U240" class="Beam" ACADID="7ECC9" dstvName="U240">
    86. <explicitQuantity>1</explicitQuantity>
    87. <externalName name="U240" index="1"/>
    88. <length>2657.000</length>
    89. <paintArea>2059174.743</paintArea>
    90. <material key="S235JR" name="S235JR"/>
    91. <weight>88212.39</weight>
    92. <exactWeight>88214.40</exactWeight>
    93. <weightPerMeter>33200.00</weightPerMeter>
    94. <section key="Channels DIN18800-1#@§@#U240" name="U240"/>
    95. <sysLength>2657.000</sysLength>
    96. <sawLength>2657.000</sawLength>
    97. <angleX1>0.0000</angleX1>
    98. <angleY1>0.0000</angleY1>
    99. <angleX2>0.0000</angleX2>
    100. <angleY2>0.0000</angleY2>
    101. <SawCutInfo>0</SawCutInfo>
    102. <ElementID>24321</ElementID>
    103. </part>
    104. </singlepart>
    105. <singlepart id="81984" num="1009" quantity="1">
    106. <explicitQuantity>1</explicitQuantity>
    107. <part id="802CC" name="BL20x230x80" class="Plate" ACADID="802B8" dstvName="BL 20">
    108. <explicitQuantity>1</explicitQuantity>
    109. <role key="Endplate#1" name="Kopfplatte"/>
    110. <denotation>USP</denotation>
    111. <externalName name="FL80X20" index="1"/>
    112. <length>230.000</length>
    113. <paintArea>49199.995</paintArea>
    114. <numHoles>2</numHoles>
    115. <material key="S235JR" name="S235JR"/>
    116. <weight>2888.80</weight>
    117. <exactWeight>2781.32</exactWeight>
    118. <thickness>20.000</thickness>
    119. <width>80.000</width>
    120. <area1>18399.998</area1>
    121. <area2>18399.998</area2>
    122. <contourLength>620.000</contourLength>
    123. <ElementID>24524</ElementID>
    124. </part>
    125. </singlepart>
    126. <singlepart id="82411" num="1049" quantity="1">
    127. <explicitQuantity>1</explicitQuantity>
    128. <part id="26B97" name="BL15x229x85" class="Plate" ACADID="16DD6" dstvName="BL 15">
    129. <explicitQuantity>1</explicitQuantity>
    130. <role key="Endplate#1" name="Kopfplatte"/>
    131. <length>229.000</length>
    132. <paintArea>48348.164</paintArea>
    133. <numHoles>2</numHoles>
    134. <material key="S235JR" name="S235JR"/>
    135. <weight>2291.90</weight>
    136. <exactWeight>2237.94</exactWeight>
    137. <thickness>15.000</thickness>
    138. <width>84.996</width>
    139. <area1>19464.138</area1>
    140. <area2>19464.138</area2>
    141. <contourLength>627.992</contourLength>
    142. <ElementID>6228</ElementID>
    143. </part>
    144. </singlepart>
    145. </proxy>
    146. <boltPatternOnSite id="7ED44" num="1032" name="EN 14399-4-M16X60Mu2S-10.9-TZN" class="BoltPattern" ACADID="7ED45" setkey="1" nameBolt="Sechskantschraube EN 14399-4 16 x 60 - 10.9 HV" setBoltsType="1">
    147. <explicitQuantity>1</explicitQuantity>
    148. <set key="Mu2S" name="Mu2S"/>
    149. <numBolts>2</numBolts>
    150. <standard key="14399-4" name="EN 14399-4"/>
    151. <diameter>16.000</diameter>
    152. <material key="10.9" name="10.9"/>
    153. <coating key="TZN" name="TZN"/>
    154. <boltLength>60.000</boltLength>
    155. <fitLength>32.000</fitLength>
    156. <fitLengthIncrement>0.000</fitLengthIncrement>
    157. <holeTolerance>2.000</holeTolerance>
    158. <mountLocation>0</mountLocation>
    159. <ConnectedPartsIds>82411,8192C;82363,8192A;</ConnectedPartsIds>
    160. </boltPatternOnSite>
    161. <boltPatternOnSite id="802D0" num="1030" name="EN 14399-4-M20X75Mu2S-10.9-TZN" class="BoltPattern" ACADID="802BA" setkey="2" nameBolt="Sechskantschraube EN 14399-4 20 x 75 - 10.9 HV" setBoltsType="1">
    162. <explicitQuantity>1</explicitQuantity>
    163. <set key="Mu2S" name="Mu2S"/>
    164. <numBolts>2</numBolts>
    165. <standard key="14399-4" name="EN 14399-4"/>
    166. <diameter>20.000</diameter>
    167. <material key="10.9" name="10.9"/>
    168. <coating key="TZN" name="TZN"/>
    169. <boltLength>75.000</boltLength>
    170. <fitLength>40.002</fitLength>
    171. <fitLengthIncrement>0.000</fitLengthIncrement>
    172. <holeTolerance>2.000</holeTolerance>
    173. <mountLocation>0</mountLocation>
    174. <ConnectedPartsIds>81984,8192C;81982,8194A;</ConnectedPartsIds>
    175. </boltPatternOnSite>
    176. </mainpart>
    177. </assembly>
    178. <assembly name="Bestand"/>
    179. </parts>
    180. <DerivedDocuments>
    181. <Details/>
    182. <BOMs/>
    183. <DSTVFiles/>
    184. </DerivedDocuments>
    185. </modelExtract>


    VB.NET-Quellcode

    1. Imports System.Xml
    2. Imports System.Data
    3. Public Class Form1
    4. Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click
    5. doc.Load("d:\MySchema.xml")
    6. Dim header As XmlNodeList = doc.DocumentElement.SelectNodes("/modelExtract")
    7. Dim assemply As XmlNodeList = doc.DocumentElement.SelectNodes("/modelExtract/parts")
    8. Dim xr As Xml.XmlTextReader = New Xml.XmlTextReader("d:\MySchema.xml")
    9. Dim projekt_name As String = "", projekt_number As String = "", projekt_client As String = "", buildingLocation As String = "", contractor As String = "", dateOrder As String = "", designer As String = "", dateConstruction As String = "", detailer As String = ""
    10. Dim assemplyname As String = "", mainpartnum As String = "", mainpartq As String = ""
    11. For Each node As XmlNode In header
    12. 'ListBox1.Items.Clear()
    13. projekt_name = node.SelectSingleNode("header/project/name").InnerText
    14. projekt_number = node.SelectSingleNode("header/project/number").InnerText
    15. projekt_client = node.SelectSingleNode("header/project/client").InnerText
    16. buildingLocation = node.SelectSingleNode("header/project/buildingLocation").InnerText
    17. contractor = node.SelectSingleNode("header/project/contractor").InnerText
    18. dateOrder = node.SelectSingleNode("header/project/dateOrder").InnerText
    19. designer = node.SelectSingleNode("header/project/designer").InnerText
    20. dateConstruction = node.SelectSingleNode("header/project/dateConstruction").InnerText
    21. detailer = node.SelectSingleNode("header/project/detailer").InnerText
    22. 'header
    23. i = 0
    24. Do While xr.Read
    25. If xr.NodeType = Xml.XmlNodeType.Element Then
    26. If (xr.Name = "parts") Then
    27. If xr.NodeType = Xml.XmlNodeType.Element Then
    28. For Each noden As XmlNode In assemply
    29. assemplyname = noden.SelectSingleNode("assembly/@name").InnerText
    30. Next
    31. If (xr.Name = "parts") Then
    32. For Each nodem As XmlNode In assemply
    33. mainpartnum = nodem.SelectSingleNode("assembly/mainpart/@num").InnerText
    34. mainpartq = nodem.SelectSingleNode("assembly/mainpart/@quantity").InnerText
    35. Next
    36. End If
    37. End if
    38. End If
    39. End If
    40. Loop
    41. DataGridView1.Rows.Clear()
    42. DataGridView1.ColumnCount = 9
    43. DataGridView1.Rows.Add(projekt_name, projekt_number, projekt_client, buildingLocation, contractor, dateOrder, designer, dateConstruction, detailer)
    44. DataGridView1.Rows.Add(assemplyname, mainpartnum, mainpartq)
    45. Next
    46. End Sub


    Ich möchte gern ab assembly die xml durchlaufen und alle mainpart num und quantity uns alle singelpart num und quantity im datagritview angezeigt bekommen ......da kommen auch noch werte dazu die ich auch noch benötige
    im mom bekomm ich immer nur die erste mainpart num angezeigt
    irgend etwas haut da mit der schleife nicht hin

    mfg homes22

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „homes22“ ()

    so Teil-Ausschnitte eine Xml führen bei so komplexen Daten in die Irre, bes, wenn das Root-Element verkürzt wird.
    Also ich vermute zumindest, da ist ein xml-Namespace angegeben, und wenn man den beim Parsen nicht berücksichtigt, wirds nix.

    Also wenn man mit umzugehen weiß ists ganz einfach: Xml verarbeiten mit Intellisense (Schema und XDocument)
    Hallo

    danke für die antwort .....
    ich habe mal die xml angehangen
    ich finde da keinen namespace !!
    das wäre schön gewesen !!!

    das ist eine ausgabe einer stückliste aus einem stahlbau programm .....
    die würde ich gerne in eine sql db speichern und dann damit weiter arbeiten ...

    mfg homes22
    Dateien
    • MySchema.xml

      (123,83 kB, 210 mal heruntergeladen, zuletzt: )
    jo, erstaunlich, dass weder Namespace noch Schema angegeben ist, aber nicht weiter schlimm.
    Kannst du genauso ein XmlSchema für erzeugen, wie wenn es einen Namespace dafür hätte. Guck dir halt das Tut an.

    Und nenn die Datei anders. Die Datei ist nämlich grad keine Schema-Datei - Nomen est Omen!
    Eine Schema-Datei kannst du dir - wie im Tut gezeigt - daraus erzeugen (aber bitte erst umbenennen!).
    Das Schema brauchst du zur Laufzeit eiglich nicht wirklich.
    Aber zum Entwurf ist es ungeheuer wichtig, weil Intellisense dir dann helfen kann, gültige Abfragen zu entwickeln.
    Wenn man dir dann aber eine Xml liefert, in der garnet vorhanden ist, was du abfragst (oder es heißt auf einmal anders), dann brauchst du dich über komische Ergebnisse auch nicht zu wundern.

    Vonne Idee her definiert ein Schema, was im xml gültig ist. Wenn also gültig sein soll, dass der assembly-Tag nicht Pflicht ist, kann man das sicher in der Xsd-Sprache definieren.
    Nur muss man sich dafür mit der Xsd-Sprache auskennen, dass man das korrekt definiert.
    Man kanns aber auch lassen, weil die Laufzeit kann das Xml auch ohne Schema-Angabe lesen - im Zweifelsfall ergeben bestimmte Abfragen dann einfach keine Ergebnisse.

    Jedenfalls mit der selbst-generierten Xsd hast du ein Primitiv-Schema, welches Intellisense instand setzt, dir für genau dieses eine Xml Abfrage-Ausdrücke vorzuschlagen.

    VB.NET-Quellcode

    1. Imports <xmlns="http://www.w3.org/2001/XMLSchema">
    2. Public Class Form1
    3. Public Sub New()
    4. InitializeComponent()
    5. ListBox1.DataSource = LoadData.ToList
    6. End Sub
    7. Private Function LoadData() As IEnumerable(Of String)
    8. Dim xdoc = XDocument.Load("d:\MySchema.xml")
    9. Return From xel In xdoc.<modelExtract>.<header>.<modelUnits>.<length> Select xel.@unit
    10. Return New String() {}
    11. End Function
    12. End Class


    also ich denke das da was mit dem schema nicht passt ich bekomme keinen wert zurück !!!

    mfg homes22
    hallo

    ich muss hier trotzdem nochmal fragen
    also das auslesen funzt soweit
    aber wie binde ich die returns an ein array
    ich habe mal sowas in der art versucht aber da komm ich nicht weiter ??

    VB.NET-Quellcode

    1. Private Function LoadData1() As IEnumerable(Of String)
    2. Dim xdoc = XDocument.Load("d:\MySchema.xml")
    3. Dim a As New ArrayList
    4. a(0) = From xel In xdoc.<modelExtract>.<header>.<project>.<name> Select xel.Value
    5. a(1) = From xel In xdoc.<modelExtract>.<header>.<project>.<number> Select xel.Value
    6. Return a
    7. End Function


    so das ich mehrere werte zusammen fassen kann

    mfg homes22

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „homes22“ ()

    returns kann man nicht binden (was immer damit gemeint sein mag). Was gibts für ein Problem mit deim Code aus post#8?

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public Sub New()
    3. InitializeComponent()
    4. ListBox1.DataSource = LoadData.ToList
    5. ' oder wenn das toller sein soll:
    6. ListBox1.DataSource = LoadData.ToArray
    7. End Sub
    8. Private Function LoadData() As IEnumerable(Of String)
    9. Dim xdoc = XDocument.Load("d:\MySchema.xml")
    10. Return From xel In xdoc.<modelExtract>.<header>.<modelUnits>.<length> Select xel.@unit
    11. End Function
    12. End Class