2010-04-19 13 views
6

Potrzebuję filtrować wyrażenie XPath, aby pobrać tylko określony atrybut, który nie jest pusty.Filtr XPath nie jest pustym elementem potomnym

Próbowałem to:

<xsl:template match="DocumentElement/QueryResults[string(@FileName)]"> 

a to:

<xsl:template match="DocumentElement/QueryResults[string-length(@FileName)>0]"> 

ale to nie działa. Muszę ten sam rodzaj danych powracających z wyrażeniem folloing XPath ...

<xsl:template match="DocumentElement/QueryResults"> 

... ale filtrowane, aby uniknąć elementy z pustego atrybutu @FileName.

Dzięki!

Odpowiedz

8

Ponieważ FileName jest elementem podrzędnym, a nie atrybutem, należy uzyskać do niego dostęp jako taki i nie używać kwalifikatora atrybutu @ przed nazwą węzła.

Spróbuj:

<xsl:template match="DocumentElement/QueryResults[FileName]"> 

To będzie wybrać elementy, które mają DocumentElement/QueryResults element FileName dzieci.

Jeśli jednak masz zawsze element FileName dzieckiem (czasami pusty) i chcesz wybrać non pustych, spróbuj tego:

<xsl:template match="DocumentElement/QueryResults[string-length(FileName) &gt; 0]"> 
+0

Os, przepraszam, właśnie znalazłem "FileName" isn't i atrybut, ale faktycznie węzeł. Jak mogę sprawdzić, czy nie jest pusty? Dzięki. –

+0

@Marcos - To by wyjaśniało twoje problemy ... Odpowiedź zaktualizowana (po prostu usuń kwalifikator atrybutu @). – Oded

+0

Dzięki, nie jestem specjalistą od XPATH i miałem problemy z dziwnym zachowaniem oprogramowania, którego używam i parsera. Ponieważ dane źródłowe były pobierane przez zapytanie SQL, zastosowałem do niego klauzulę WHERE, zamiast używać filtru w wyrażeniu XPATH. Dziękuję Ci. –

3
<xsl:template match="DocumentElement/QueryResults[FileName != '']"> 

To tylko szybkie przypuszczenie, a ja nie pracowałem z XPath/XSLT od dłuższego czasu. Mimo to, jeśli jest pusty, to powinno go pominąć. Chociaż wolę korzystać z funkcji takich jak string-length, nie wszystkie UA je obsługują (w szczególności parsery XSLT po stronie klienta, które ledwo pracują z XPath i XSLT 1.0 w ogóle, nigdy nie myśl o przydatnych funkcjach i funkcjach, które zapewniają XSLT 2.0 i XPath).

+0

Dzięki, nie jestem specjalistą od XPATH i miałem problemy z dziwnym zachowaniem oprogramowania, którego używam i parsera. Ponieważ dane źródłowe były przeciągane przez zapytanie SQL, zastosowałem do niego filtr, zamiast używać filtru w wyrażeniu XPATH. Dzięki i tak. –

Powiązane problemy