Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2007 Teil von April

SELFHTML Forumsarchiv
auf element mit id zugreifen

Informationsseite
  1. Seite (XSL) auf element mit id zugreifen von Steffen F., 30. 04. 2007, 21:35
nach unten

auf element mit id zugreifen

Die folgende Nachricht zum Thema stammt von: Steffen F., 30. 04. 2007, 21:35

Hallo,

wie kann man am schnellste auf ein element mit einer bestimmten id zugreifen wenn man xsl:value-of select="document('aURI')/???" verwendet, um die entsprechende xml datei auszulesen? Was ist hier die beste methode, wenn die elemente auf unterschiedlichen ebenen sind, die id aber wirklich einmalig vergeben sind? mit meiner xpath anweisung ist es ziemlich langsam //*[@id = 'XXX']

Dankbar fuer Vorschläge

S.

nach obennach unten

auf element mit id zugreifen

Die folgende Nachricht zum Thema stammt von: Thomas J.S., 30. 04. 2007, 22:00

Hallo,

»» wie kann man am schnellste auf ein element mit einer bestimmten id zugreifen wenn man xsl:value-of select="document('aURI')/???" verwendet, um die entsprechende xml datei auszulesen? Was ist hier die beste methode, wenn die elemente auf unterschiedlichen ebenen sind, die id aber wirklich einmalig vergeben sind? mit meiner xpath anweisung ist es ziemlich langsam //*[@id = 'XXX']
»»

document('aURI')/id('XXX').

Aber es _muss_ ein ID sein. Siehe dazu auch ie Erklärung: http://aktuell.de.selfhtml.org/artikel/xml/gruppierung1/#xmldtd

Grüße
Thomas

nach obennach unten

auf element mit id zugreifen

Die folgende Nachricht zum Thema stammt von: Steffen F, 30. 04. 2007, 22:45

Hallo Thomas,

danke für die Antwort, aber die Funktion hatte ich schon ausprobiert und sie läuft ins Leere - soll heissen, kein Knoten wird ausgewählt.

<xsl:value-of select="document('document.xml')//*[@id = string($ID_Nr)]/@name"/> diese Anweisung gibt mir das Attribute name zurueck

<xsl:value-of select="document('document.xml')/id(string($ID_Nr))/@name"/> diese Anweisung läuft ins Leere.

Bei mir kommt saxon8.9 zum Einsatz. Habe ich jetzt etwas falsch verstanden?

Gruß, S.
                                 

nach obennach unten

auf element mit id zugreifen

Die folgende Nachricht zum Thema stammt von: Thomas J.S., 01. 05. 2007, 20:22

Hallo,

»» danke für die Antwort, aber die Funktion hatte ich schon ausprobiert und sie läuft ins Leere - soll heissen, kein Knoten wird ausgewählt.
»»
»» <xsl:value-of select="document('document.xml')//*[@id = string($ID_Nr)]/@name"/> diese Anweisung gibt mir das Attribute name zurueck
»»
»» <xsl:value-of select="document('document.xml')/id(string($ID_Nr))/@name"/> diese Anweisung läuft ins Leere.
»»
»» Bei mir kommt saxon8.9 zum Einsatz. Habe ich jetzt etwas falsch verstanden?

string() ist hier unnötig.

Ist "$ID_Nr" wirklich eine _XML-ID_? http://de.selfhtml.org/xml/dtd/attribute.htm#mit_identifikationswert (unter "Beachten Sie").
Der Name deiner Variable läßt darauf schließen, dass dein "ID" eine Nummer ist, was als ID im Sinne von XML ungültig wäre, weshalb die id()-Funktion nicht greift.

Grüße
Thomas

nach obennach unten

auf element mit id zugreifen

Die folgende Nachricht zum Thema stammt von: Steffen F., 01. 05. 2007, 22:01

Hallo Thomas,

Nein, das Beispiel war etwas missverständlich, das Dokument enthält schon die id in der Form id="something_anotheruniquestring". Jetzt stellt sich für mich die Frage, muss dem Dokument ein Schema angehangen sein, und wenn ja, könnte es daran liegen, dass das Schema "ausserhalb" liegt, also in der form schemalocation als http://internetip/schema.xsd . Der Parser aber in dem Moment nicht auf das externe Schema zugreifen kann? Ich kann das nur schwerlich hier testen.

Gruß, S.

nach obennach unten

auf element mit id zugreifen

Die folgende Nachricht zum Thema stammt von: Thomas J.S., 01. 05. 2007, 22:22

Hallo,

»» Nein, das Beispiel war etwas missverständlich, das Dokument enthält schon die id in der Form id="something_anotheruniquestring". Jetzt stellt sich für mich die Frage, muss dem Dokument ein Schema angehangen sein, und wenn ja, könnte es daran liegen, dass das Schema "ausserhalb" liegt, also in der form schemalocation als http://internetip/schema.xsd . Der Parser aber in dem Moment nicht auf das externe Schema zugreifen kann? Ich kann das nur schwerlich hier testen.
»»

Ja, deshalb habe ich dir in der ersten Antwort den Artikel verlinkt (wo genau auf den Umstand verwiesen wird: dass der XSL-Parser wissen muss, was in deinem Dokument als eine ID gilt. Das bekommt er vom XML-Parser. Wenn es keine Informationen darüber gibt, was als ID gilt (weil keine DTD/Schema), kann auch der XSL-Prozessor nicht wissen was er als ID nehmen soll. Daher funktioniert id() nicht. Dann bleibt dir nur der Weg, denn du schon genommen hast.

Grüße
Thomas

nach obennach unten

auf element mit id zugreifen

Die folgende Nachricht zum Thema stammt von: Steffen S., 01. 05. 2007, 22:45

Danke,

schafft Klarheit, werde es wohl mal lokal testen, aber in der Umgebung, in der der Parser läuft, kann das Schema wohl nicht eingelesen werden, obwohl es richtig deklariert ist. Danke noch einmal.

Gruß

nach obennach unten

auf element mit id zugreifen

Die folgende Nachricht zum Thema stammt von: Thomas J.S., 01. 05. 2007, 22:57

Hallo,

»» schafft Klarheit, werde es wohl mal lokal testen, aber in der Umgebung, in der der Parser läuft, kann das Schema wohl nicht eingelesen werden, obwohl es richtig deklariert ist. Danke noch einmal.
»»

Nochwas: ich habe teilweise "gelogen":
"document('document.xml')/id($ID_Nr)/@name" funktioniert, aber nur mit XSLT 2.0.

Wenn du XSLT 1.0 brauchst geht z.B. so:
<xsl:for-each select="document('document.xml')">
 <xsl:value-of select="id($ID_Nr)/@name"/>
</xsl:for-each>

Hat damit zu tun, dass in XSLT 1.0 id() immer für das Dokument gilt in dem auch der Kontextknoten ist (deshalb muss man den (z.B. mit for-each) wechseln)

Die Sache mit der ID und das Vorhandensein von DTD/Scheme bleibt trotzdem!

Grüße
Thomas

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2007 Teil von April

© 1998-2006 Seite Impressum, Software: Classic Forum