XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Tue, 24 Jan 23 17:17:06 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805708#m1805708 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805708#m1805708 <p>Hi,</p> <p>ich hab XMLs von diesem Aussehen (auf's Wesentliche reduziert):</p> <pre><code class="block language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>root</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>partner</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>id</span><span class="token punctuation">></span></span>7<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>id</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>name</span><span class="token punctuation">></span></span>seven<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>name</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>partner</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>partner</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>id</span><span class="token punctuation">></span></span>1<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>id</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>name</span><span class="token punctuation">></span></span>one<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>name</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>partner</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>partner</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>id</span><span class="token punctuation">></span></span>0<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>id</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>name</span><span class="token punctuation">></span></span>zero<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>name</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>partner</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>root</span><span class="token punctuation">></span></span> </code></pre> <p>Es können wesentlich mehr partner-Elemente vorhanden sein, aber mindestens 1.<br> Die IDs sind immer positive Ganzzahlen.<br> Die Elemente sind unsortiert, ich kann also nicht einfach das erste partner-Element nehmen.</p> <p>Dazu brauche ich jetzt den name, aus dem Element mit der niedrigsten id, falls die id entweder 0 oder 1 ist.</p> <p><code>/root/partner[./id = 1]/name</code> gibt mir 'one',<br> <code>/root/partner[./id = 0]/name</code> gibt mir 'zero',<br> falls beide vorhanden sind.</p> <p>Aber das Kombinieren bekomm ich noch nicht hin, hab auch keine Idee dazu.</p> <p>cu,<br> Andreas a/k/a MudGuard</p> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Tue, 24 Jan 23 17:33:17 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805710#m1805710 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805710#m1805710 <p>Hallo Andreas,</p> <p>mit XPath ab 2.0:</p> <pre><code class="block">/root/partner[id = min(//id)]/name -> zero </code></pre> <p>Grüße,<br> Thomas</p> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Tue, 24 Jan 23 17:51:23 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805711#m1805711 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805711#m1805711 <p>Hi,</p> <p>woher wußte ich nur, daß Du antworten wirst?</p> <blockquote> <p>mit XPath ab 2.0:</p> <pre><code class="block">/root/partner[id = min(//id)]/name -> zero </code></pre> </blockquote> <p>hm.</p> <p>javax.xml.transform.TransformerException: Die Funktion konnte nicht gefunden werden: min</p> <p>Scheint wohl kein 2.0 zu können ... </p> <p>cu,<br> Andreas a/k/a MudGuard</p> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Tue, 24 Jan 23 18:00:07 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805712#m1805712 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805712#m1805712 <p>Hi,</p> <blockquote> <p>Scheint wohl kein 2.0 zu können ... </p> </blockquote> <p>ja, auch in relativ aktuellem Java 17 wird in der XPath-Javadoc auf die Version 1.0 von XPath verwiesen.</p> <p>Naja, die 2.0 ist ja erst gut 12 Jahre alt …</p> <p>Trotzdem natürlich Danke für Deine Mühe! Hab ich in der ersten Antwort vergessen.</p> <p>cu,<br> Andreas a/k/a MudGuard</p> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Tue, 24 Jan 23 18:17:21 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805714#m1805714 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805714#m1805714 <p>@@MudGuard</p> <blockquote> <p>woher wußte ich nur, daß Du antworten wirst?</p> </blockquote> <p>Wenn du das nicht willst, darfst du nicht „xml“ taggen. </p> <p lang="uk"> Живіть довго і процвітайте</p> <div class="signature">-- <br> <em>„Im Vergleich mit Elon Musk bei Twitter ist ein Elefant im Porzellanladen eine Ballerina.“</em><br> — @Grantscheam auf Twitter </div> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Wed, 25 Jan 23 10:33:40 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805728#m1805728 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805728#m1805728 <p>Hallo Andreas,</p> <blockquote> <p>javax.xml.transform.TransformerException: Die Funktion konnte nicht gefunden werden: min</p> <p>Scheint wohl kein 2.0 zu können ... </p> </blockquote> <p>Dann auf die härtere Tour über die sibling-Achsen:</p> <pre><code class="block">/root/partner[id = /root/partner[not(preceding-sibling::partner/id &lt;= id) and not(following-sibling::partner/id &lt; id)]/id]/name </code></pre> <p>Grüße,<br> Thomas</p> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Tue, 24 Jan 23 18:14:51 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805713#m1805713 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805713#m1805713 <blockquote> <p>Naja, die 2.0 ist ja erst gut 12 Jahre alt …</p> </blockquote> <p>16 (01/2007)</p> <p>Grüße,<br> Thomas</p> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Tue, 24 Jan 23 18:55:16 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805715#m1805715 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805715#m1805715 <p>Hi,</p> <blockquote> <blockquote> <p>Naja, die 2.0 ist ja erst gut 12 Jahre alt …</p> </blockquote> <p>16 (01/2007)</p> </blockquote> <p>das macht's auch nicht besser. Ich hatte 12/2010 von hier: <a href="https://www.w3.org/TR/xpath/" rel="nofollow noopener noreferrer">XPath Cover Page</a></p> <p>cu,<br> Andreas a/k/a MudGuard</p> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Tue, 24 Jan 23 18:56:30 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805717#m1805717 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805717#m1805717 <p>Hi,</p> <blockquote> <blockquote> <p>woher wußte ich nur, daß Du antworten wirst?</p> </blockquote> <p>Wenn du das nicht willst, darfst du nicht „xml“ taggen. </p> </blockquote> <p>Von "Nicht-Wollen" kann gar keine Rede sein, es war eher ein "Hoffen".</p> <p>cu,<br> Andreas a/k/a MudGuard</p> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Tue, 24 Jan 23 19:19:56 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805718#m1805718 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805718#m1805718 <p>Hallo Andreas,</p> <blockquote> <p>das macht's auch nicht besser. Ich hatte 12/2010 von hier: <a href="https://www.w3.org/TR/xpath/" rel="nofollow noopener noreferrer">XPath Cover Page</a></p> </blockquote> <p>Ok, ist die Second Edition.</p> <p>Habe über einige <a href="https://speakerdeck.com/xmlarbyter/xslt-2-dot-0-und-xpath-2-dot-0-fur-praktiker-neuerungen-im-uberblick" rel="nofollow noopener noreferrer">Neuerungen</a> zeitnah berichtet. </p> <p>Grüße,<br> Thomas</p> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Tue, 24 Jan 23 20:31:13 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805720#m1805720 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805720#m1805720 <p>@@MudGuard</p> <blockquote> <blockquote> <blockquote> <p>woher wußte ich nur, daß Du antworten wirst?</p> </blockquote> <p>Wenn du das nicht willst, darfst du nicht „xml“ taggen. </p> </blockquote> <p>Von "Nicht-Wollen" kann gar keine Rede sein, es war eher ein "Hoffen".</p> </blockquote> <p>Natürlich. Sollte ich je wieder eine Frage zu XSLT/XPath haben (<a href="https://forum.selfhtml.org/self/2007/nov/22/pseudoattribut-knoten-von-pi-knoten/1183267#m1183267" rel="noopener noreferrer">die letzte</a> ist schon ein Weilchen her), würde ich sie hier stellen in der Hoffnung, dass ThomasM drauf anspringt.</p> <p lang="uk"> Живіть довго і процвітайте</p> <div class="signature">-- <br> <em>„Im Vergleich mit Elon Musk bei Twitter ist ein Elefant im Porzellanladen eine Ballerina.“</em><br> — @Grantscheam auf Twitter </div> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Wed, 25 Jan 23 11:57:41 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805731#m1805731 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805731#m1805731 <p>Hi,</p> <blockquote> <pre><code class="block">/root/partner[id = /root/partner[not(preceding-sibling::partner/id &lt;= id) and not(following-sibling::partner/id &lt; id)]/id]/name </code></pre> </blockquote> <p>wie soll denn ein UnThomasM auf sowas kommen?</p> <p>Hat zwar beim ersten Versuch ne Exception geworfen, aber Du hast das wohl für den Einsatz in XSLT geschrieben - nach Ersatz der &lt; durch < hat's dann getan.</p> <p>Und mit der Ergänzung <code> and (id <= 1)</code> liefert es dann auch brav NIX, wenn weder eine 0 noch eine 1 vorhanden ist.</p> <p>Ganz lieben Dank für Deine Hilfe!</p> <p>cu,<br> Andreas a/k/a MudGuard</p> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Wed, 25 Jan 23 18:56:44 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805745#m1805745 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805745#m1805745 <p>Ohne die Sibling-Achsen:</p> <pre><code class="block language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">xsl:</span>for-each</span> <span class="token attr-name">select</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>partner<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">xsl:</span>sort</span> <span class="token attr-name">select</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>number(id)<span class="token punctuation">"</span></span> <span class="token attr-name">order</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ascending<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">xsl:</span>if</span> <span class="token attr-name">test</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>position() = 1<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">xsl:</span>copy-of</span> <span class="token attr-name">select</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>.<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">xsl:</span>if</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">xsl:</span>for-each</span><span class="token punctuation">></span></span> </code></pre> <p>Cheers! David</p> XPath-Ausdruck: Element mit id 0, wenn nicht vorhanden, mit id 1 Wed, 25 Jan 23 19:17:15 Z https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805747#m1805747 https://forum.selfhtml.org/self/2023/jan/24/xpath-ausdruck-element-mit-id-0-wenn-nicht-vorhanden-mit-id-1/1805747#m1805747 <p>Hi,</p> <blockquote> <p>Ohne die Sibling-Achsen:</p> <pre><code class="block language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">xsl:</span>for-each</span> <span class="token attr-name">select</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>partner<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">xsl:</span>sort</span> <span class="token attr-name">select</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>number(id)<span class="token punctuation">"</span></span> <span class="token attr-name">order</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ascending<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">xsl:</span>if</span> <span class="token attr-name">test</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>position() = 1<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">xsl:</span>copy-of</span> <span class="token attr-name">select</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>.<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">xsl:</span>if</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">xsl:</span>for-each</span><span class="token punctuation">></span></span> </code></pre> </blockquote> <p>das ist aber kein XPath-Ausdruck. Es geht auch nicht um XSLT.</p> <p>Es geht nur um XPath 1.0.</p> <p>cu,<br> Andreas a/k/a MudGuard</p>