2012-05-11 8 views
1

と句と同等のように私は、次のSQLクエリと同等のものを必要とします私は、XSLTとPHPを使用しますので)MySQLのXPathの

SELECT * FROM films WHERE title LIKE ="V__ %"; 

は、どのように私はフィルム/フィルム/タイトル、XPath 1.0のようなツリーでこのXPath 1.0の式を行うことができます。

ありがとうございました

+0

Zatla00を:現在受け入れ答えは間違って非マッチングを選択したことを、メモしています選択基準要素 - 私の答えの終わりを見てください。 –

答えて

2

空白文字列を表示できない場合は問題ありませんか?次に、あなたが使用することができます。

//title[starts-with(text(), 'V') and string-length(substring-before(text(), ' '))=3] 

をスペースの後の文字列の存在が重要である場合は、あなたが使用することができます。

//title[starts-with(text(), 'V') and string-length(substring-before(text(), ' '))=3 and string-length(substring-after(text(), ' '))>0] 

http://www.w3.org/TR/xpath/

+0

ありがとう、2番目の表現は私が探していたものです。 – Zatla00

1

から現在受け入れ答えが間違って非選択する、注意してください。 - 選択基準要素とのマッチング - この回答の最後を参照してください。

ここには正しい解決策があります。

使用$vAlphaは正確にすべての文字の構成されている文字列の

/films/film/title 
    [starts-with(., 'V') 
    and 
    not(translate(substring(.,1,3), $vAlpha, ''))  
    and 
    substring(.,4,1) = ' '  
    and 
    not(substring(.,5,1) = ' ') 
    and 
    not(translate(., concat($vAlpha, ' '), ' '))  
    ] 

。文字V

  1. 開始:

    これは、すべての要素/films/film/titleその文字列値を選択します。

  2. 先頭の3文字はすべて英字です。

  3. その4文字目はスペースです。

  4. その5番目の文字はスペースではありません。

  5. すべての文字は英字またはスペースです。

XSLT - ベースの検証

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 
<xsl:variable name="vAlpha" select= 
    "concat('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
      'abcdefghijklmnopqrstuvwxyz')"/> 

<xsl:template match="/"> 
    <xsl:copy-of select= 
     "/films/film/title 
      [starts-with(., 'V') 
     and 
      not(translate(substring(.,1,3), $vAlpha, ''))  
     and 
      substring(.,4,1) = ' '  
      and 
      not(substring(.,5,1) = ' ') 
      and 
      not(translate(., concat($vAlpha, ' '), ' '))   
      ] 
     "/> 
</xsl:template> 
</xsl:stylesheet> 

この変換は、以下のXML文書に適用される:

<films> 
<film> 
    <title>Van Helsing</title> 
</film> 
<film> 
    <title>Van Helsing</title> 
</film> 
<film> 
    <title>Ban Helsing</title> 
</film> 
<film> 
    <title>van Helsing</title> 
</film> 
<film> 
    <title>Vann Helsing</title> 
</film> 
<film> 
    <title>Van Helsing2</title> 
</film> 
</films> 

上記XPath式が評価され、選択された要素(この場合は1つだけ)がoにコピーされます。

<title>Van Helsing</title> 

現在受け入れ答えが間違って次の二つの一致していない要素を選択することに、注意を行います: utput

<title>Van Helsing</title> 
<title>Van Helsing2</title> 
+0

いつものように素晴らしい!しかし、 'SELECT * FROM films WHERE title LIKE =" V__% ";に対する** xpath式は**正確に**私の最初の式です:) –

+1

@AlehDouhi:はい、両方の答えは実際に何が実際に行われているかに基づいています欲しかった両者は、OPに記載されていない要求に近づいてもよく、そうでなくてもよい。この回答がOPの意図の私の推測が正確に彼の表現されていない事例ではない場合でも、いくつかの有用なテクニックの例を提供することを願っています。 –

+0

あなたの答えは@DimitreNovatchevありがとうございます、それはエントリがすべて書かれているので私に同じ結果を与える、私は映画の名前を意味します。 – Zatla00