[WPF] Xpath een XML document

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Jay-P
  • Registratie: Oktober 2003
  • Laatst online: 04-06 00:39
Kom er niet meer uit, nu al de complete dag mee bezig geweest dus tijd voor hulp ;(

Doel: Bind een listview met 3 kolommen aan een XML document.
Probleem: Ik krijg niet de juiste data te pakken, ik zit er super close bij, ik heb nl. nu succesvol de parent node gebind maar ik moet de childs daarvan hebben.

De XML
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<ExportedDatabase NumOriginalTables="258" NumTables="227">
<Table TableName="DYN_cym5" TableID="6" NumOriginalColumns="8" NumColumns="8" NumRows="30751">
        <Column ColumnName="IDclassification" ColumnID="0" ColumnType="Int32">
            <Cell>1</Cell>
            <Cell>2</Cell>
            <Cell>3</Cell>

....................................................

<Table TableName="DYN_team" TableID="55" NumOriginalColumns="134" NumColumns="113" NumRows="118">
        <Column ColumnName="IDteam" ColumnID="0" ColumnType="Int32">
            <Cell>1</Cell>
            <Cell>3</Cell>
            <Cell>4</Cell>

......................................................

         <Column ColumnName="gene_sz_abbreviation" ColumnID="2" ColumnType="String">
            <Cell>GCE</Cell>
            <Cell>ALM</Cell>
            <Cell>COF</Cell>


Code-behind om het XML bestand at runtime aan de datacontext te voeden. Hier maak ik dus al een subselectie van de XML die ik wil inladen (nl. de DYN_team table)
Visual Basic .NET:
1
2
3
Dim Teams As XmlDataProvider = FindResource("TeamsData")
Teams.XPath = "/ExportedDatabase/Table[@TableName=""DYN_team""]/*"
Teams.Source = New Uri(AppDataFolder & MainWindow.SaveGameName.Replace(".cdb", ".xml"), UriKind.Absolute)


En de XAML voor mijn listview, zoals je ziet heb ik nu de XPath de attributen (ColumnName, ColumnID etc.) van de Columns in de DYN_team table laten lezen. Werkt prima, maar hoe krijg ik nu alle Cell elementen te zien. Waarbij ik dus elke kolom (in de listview) de Cell elementen uit een andere Column (uit de XML!) element wil laten zien, dus bijv.

1 GCE 1
3 ALM 2
4 COF 3
[edit]derde kolom van dit voorbeeld staat dus niet in de XML die ik als voorbeeld heb gebruikt en moet dus uit de zelfde Table node (nl. DYN_team) komen !


XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<ListView Name="lvTeamSelection" ItemsSource="{Binding Source={StaticResource TeamsData}}" Background="Transparent" BorderThickness="0,0,0,0" Margin="5" >
            <ListView.View>
                    <GridView AllowsColumnReorder="False" >
                    <GridViewColumn Header="Country" Width="45" >
                      <GridViewColumn.DisplayMemberBinding>
                            <!--<Binding XPath="//Column[ColumnName=IDteam]/Cell" /> -->
                          <Binding XPath="@ColumnID" />
                        </GridViewColumn.DisplayMemberBinding>
                      </GridViewColumn>
                    <GridViewColumn Header="Team" Width="130" >
                      <GridViewColumn.DisplayMemberBinding>
                             <!--<Binding XPath="//Column[ColumnName=gene_sz_name]/Cell" /> -->
                          <Binding XPath="@ColumnName" />
                      </GridViewColumn.DisplayMemberBinding>
                    </GridViewColumn>
                        <GridViewColumn Header="Division" Width="45" >
                            <GridViewColumn.DisplayMemberBinding>
                                <!--<Binding XPath="//Column[ColumnName=IDcountry]/Cell" /> -->
                                <Binding XPath="@ColumnType" />
                            </GridViewColumn.DisplayMemberBinding>
                        </GridViewColumn>
                    </GridView>
            </ListView.View>

            </ListView>

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ik denk dat je die XML zelf hebt gemaakt, maar nog een beetje onhandig. ;) Normaal gesproken ziet dat soort XML-data er meer zo uit:
XML:
1
2
3
4
5
6
7
<rij>
    <eerstekolom>1</eerstekolom>
    <tweedekolom>blablabla</tweedekolom>
     ...
</rij>
<rij>
 enz....

Verder zijn er wel voorbeelden te vinden.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Jay-P
  • Registratie: Oktober 2003
  • Laatst online: 04-06 00:39
Ik weet dat de XML zeer onlogisch in elkaar gehasseld is, helaas heb ik GEEN controle over hoe het geformateerd wordt en kan ik daar dus niks aan veranderen ;(.

Wat betreft je google link, ik weet hoe ik een listview moet binden dmv XPath, het gaat hier om het specifieke probleem dat de kolommen gevuld moeten worden met childs uit verschillende nodes.

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
De huidige XML daar kun je dit niet zomaar met XPath mee voor elkaar krijgen. Zodra je iets gaat selecteren, kun je niet meer bij de originele context node, waardoor je niet iets dat op dezelfde positie staat kunt opvragen. Volgens mij zijn er ook geen (standaard) variabelen of functies voor in zo'n ListView-context, dus dit gaat niet lukken. In XSLT zou het bijvoorbeeld met parameters kunnen. De enige oplossing is dus de XML even herschrijven (bijv. 3 selectNodes, 1 for-loopje in c#) denk ik...

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten