html
  • xml
  • xpath
  • 2017-01-24 22 views 1 likes 
    1

    通貨記号のないspan class = "value"の値だけXPathで選択したいと思います。兄弟マークアップのないテキストを選択

    <span class="infoValue"> 
    <span class="value"> 
    <span class="currencyLeft">$</span> 
    1000 
    </span> 
    </span> 
    
    //span[@class='infoValue']//span[@class='value'] 
    

    このxpathでは、「$ 1000」を選択できます。 XPathで「$」記号を付けずに「1000」のみを削除する方法はありますか?

    私はこれを試してみます。

    //span[@class='infoValue']//span[@class='value']/span[not(currencyLeft)]" 
    

    私は再び通貨記号 "$"を取得します。

    答えて

    1

    ノードとテキストノードは<span>です。スパン・ノードを選択すると、すべてのスパン・ノードがそれを含み、すべての子孫を含む完全なノードのみを選択するため、常に$を取得します。

    //span[@class='infoValue']/span[@class='value']/text() 
    

    また、あなたは文字列としてスパンを扱い、文字列"$"を削除することができます"$"は$、いないXMLファイル内$です(:あなたがそれらのいずれかを選択することができますので、しかし、$ 1000は、テキストノードであります後者の$はXMLファイル内の特定の位置/親/ ...に関連付けられているからです)。単一の値については、こののみ動作しますが:

    normalize-space(translate(//span[@class='infoValue']/span[@class='value'], "$", "")) 
    
    +0

    これは、複数のテキストノードが返される可能性があるため、 'normalize-space() 'でトリムするのが困難な望ましくない空白を拾います。 – kjhughes

    1
    'normalize-space(//span[@class="value"]/text()[normalize-space()])' 
    
    +0

    これは機能します(+1)。 '1000'を取り囲む先頭または末尾の空白を取り除くために、別の' normalize-space() 'で囲みたいかもしれません。 – kjhughes

    +0

    ええ、良いアイデア – eLRuLL

    +0

    ありがとうございます。/span> @ span = 'value']/text()) $ x( "normalize-space(// div [@クラス、 'balanceBox] ") 結果 - " 2.000,00 " - しかし、私は自分のコードでこのxpathを使用すると、私はいつも原因があります:java.lang.IllegalArgumentException:期待された要素は1つでしたが、 zoram

    1

    このXPathの要求に応じて、

    normalize-space(//span[@class='currencyLeft']/following-sibling::text()) 
    

    1000 
    

    を選択します。

    さらに具体的には、遺産を/span[@class='currencyLeft']に指定することができます。

    0
    substring-after(//span[@class="value"], "$") 
    

    使用substring-after機能:

    最初の場合は、最初の引数 ストリング、または空の文字列の第2引数列の 最初の発生の後に続く最初の引数の文字列の部分文字列を返す

    引数stringには に第2引数文字列が含まれていません。

    関連する問題