Procházení v atributech xml   zodpovězená otázka

VB.NET

Dobrý den, chtěl bych se zeptat na něčí zkušenost s procházením v atributech uzlů xml.

Řekněme v tomto xml souboru projít všechny Kotvení Typu Name="K1"

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Ucinky>
 <Kotveni Name="Kotvení">
  <Typ Name="K1">
   <Osa Name="A">
    <Rada Name="1">
     <Kombinace Name="ZS-1" Rx="1" Ry="2" Rz="3" Mx="4" My="5" Mz="6"/>
     <Kombinace Name="ZS-2" Rx="1" Ry="2" Rz="3" Mx="4" My="5" Mz="6"/>
    </Rada>
   </Osa>
  </Typ>
  <Typ Name="K2">
   <Osa Name="B">
    <Rada Name="3">
     <Kombinace Name="ZS-1" Rx="1" Ry="2" Rz="3" Mx="4" My="14" Mz="6"/>
     <Kombinace Name="ZS-2" Rx="1" Ry="2" Rz="3" Mx="4" My="14" Mz="6"/>
     <Kombinace Name="ZS-3" Rx="1" Ry="2" Rz="3" Mx="4" My="14" Mz="6"/>     
    </Rada>
   </Osa>
  </Typ>
 </Kotveni>
</Ucinky>

Pomocí nějakého cyklu

např.

        For Each n As Xml.XmlNode In xmlucinky.SelectNodes("Kotveni")
            RFx = n.Attributes("Rx").Value
            RFy = n.Attributes("Ry").Value
            RFz = n.Attributes("Rz").Value
            RMx = n.Attributes("Mx").Value
            RMy = n.Attributes("My").Value
            RMz = n.Attributes("Mz").Value
         Next

Ovšem nějak určit to omezení jan na K1. Nějak jsem nic nenašel, děkuji.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

LINQ

Dim file = IO.Directory.GetCurrentDirectory()
file = IO.Path.Combine(file, "Data.xml")

Dim xdoc As XDocument = XDocument.Load(file)

'Přímo element Type s atr. Name="K1"
Dim xn = From k1 In xdoc.<Ucinky>.<Kotveni>.<Typ> Where k1.Attribute("Name").Value = "K1" Select k1

nebo

For Each n In xdoc.<Ucinky>.<Kotveni>.<Typ>
    If n.Attribute("Name").Value = "K1" Then
        '...
    End If
Next

nebo XmlDocument

Dim x As Xml.XmlDocument = New Xml.XmlDocument()
x.Load(file)

For Each t As Xml.XmlNode In x.SelectSingleNode("Ucinky").SelectSingleNode("Kotveni").SelectNodes("Typ")
    If t.Attributes("Name").InnerText = "K1" Then
        '...
    End If
Next
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

podle mě to bude zdaleka nejjednoduší přes XPath.

xmlDocumentInstance.SelectNodes("//Kotveni/Typ[@Name='K1']")

Tato funkce vrátí list všech nodů "Typ", které mají atribut "Name" roven "k1" a jejichž přímým rodičem je "Kotveni"

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Tak tohle jsem neznal, budu se tomu muset pověnovat.

Vypadá to dost jednoduše.

Děkuji za ukázku

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Doporučuji podívat se na tutorial na http://zvon.org/comp/r/tut-XPath_1.html#... jednotlivé možnosti XPath jsou tam ukázány vždy na několika jednoduchých příkladech.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji, přesně tohle jsem potřeboval.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback