2016-03-19 5 views
0

Hier ist mein Beispiel xml data. Derzeit bin ich mit dem folgenden XPathWarum führt mein XPath dazu, dass Attribute in der falschen Reihenfolge gemeldet werden?

"//person[@id]|//plan[@selected='yes']//*[not(@max_dur)]" und die gemeldeten Daten als

> head(z1) 
     id mode dep_time trav_time arr_time type link   x    y start_time end_time 
1 10000062 car 03:32:01 00:00:47 03:32:48 <NA> <NA>   <NA>   <NA>  <NA>  <NA> 
2 10000062 <NA>  <NA>  <NA>  <NA> links <NA> 335757.670587 3127766.05749 03:32:48 07:37:44 
3 10000062 <NA>  <NA>  <NA>  <NA> work 21218   <NA>   <NA>  <NA>  <NA> 
4 10000062 car 07:37:44 00:08:52 07:46:36 <NA> <NA>   <NA>   <NA>  <NA>  <NA> 
5 10000062 <NA>  <NA>  <NA>  <NA> links <NA> 336661.535923 3120921.80874 07:46:36 08:23:20 
6 10000062 <NA>  <NA>  <NA>  <NA> meal 21594   <NA>   <NA>  <NA>  <NA> 

Aber wenn ich die Attribute alle lesen waren, die mithilfe von XPath "//person[@id]|//plan[@selected='yes']//*", die Attribute in der richtigen Reihenfolge angegeben werden. Mit der richtigen Reihenfolge meine ich die Reihenfolge des Auftretens der Attribute in den Beispieldaten. Die Attribute mode, dep_time, trav_time, and arr_time sollten zuletzt wie folgt gemeldet werden.

head(z1) 
     id type link    x    y start_time max_dur end_time mode dep_time trav_time 
1 10000062 home 21258 334867.243653 3126570.70778 00:00:00 03:32:01  <NA> car 03:32:01 00:00:47 
3 10000062 links <NA>   <NA>   <NA>  <NA>  <NA> 07:37:44 <NA>  <NA>  <NA> 
4 10000062 work 21218 335757.670587 3127766.05749 03:32:48  <NA>  <NA> car 07:37:44 00:08:52 
6 10000062 links <NA>   <NA>   <NA>  <NA>  <NA> 08:23:20 <NA>  <NA>  <NA> 
7 10000062 meal 21594 336661.535923 3120921.80874 07:46:36  <NA>  <NA> car 08:23:20 00:07:53 
9 10000062 links <NA>   <NA>   <NA>  <NA>  <NA> 12:30:17 <NA>  <NA>  <NA> 

Im Grunde will ich nicht das Attribut lesen, aber immer noch die Reihenfolge beibehalten, wie in der zweiten Tabelle.

Antwort

1

Die Attributreihenfolge in XML wird nicht als signifikant angesehen. XML-Parser müssen die Attribute nicht in der ursprünglichen Reihenfolge melden, und Anwendungen sollten daher nicht von der Reihenfolge abhängen. Verschiedene XML-Parser und verschiedene XPath-Prozessoren geben Ihnen die Attribute in verschiedenen Ordnungen.

+0

Kann ich also sicher sein, dass sich die Reihenfolge für nachfolgende Ausführungen desselben XPath-Prozessors nicht ändert? – Gandalf

+0

Nein, es gibt keine solche Garantie. (Es kann von der Reihenfolge der Einträge in einer Hash-Tabelle abhängen, und diese kann zum Beispiel zwischen einem Release von Java und dem nächsten variieren. Im Prinzip könnte ein XPath-Prozessor davon abhängen, ob die Sonne in Manchester scheint). –

Verwandte Themen