2015-12-16 6 views
3

Я новичок в XPath, так что извините, если это глупый вопрос для вас. мне нужно извлечь только цену без «$» из первого класса пяди = «цена»Получить Xpath к частям узла

<span class="price"> 
    <span class="sup">$</span> 
    1 
    <span class="currency-delimiter">.</span> 
    <span class="sup">23</span> 
</span> 
<span class="price"> 
    <span class="sup">$</span> 
    4 
    <span class="currency-delimiter">.</span> 
    <span class="sup">56</span> 
</span> 
<span class="price"> 
    <span class="sup">$</span> 
    7 
    <span class="currency-delimiter">.</span> 
    <span class="sup">89</span> 
</span> 

Xpath, что я пришел с это

// диапазон [@ класс = «цены» ]) [1]

Но это дает мне массив каждого элемента [$] [1] [.] [23] И мне нужно только 1,23 без "$". Не могли бы вы помочь мне? Спасибо!

+0

Вы еще что-нибудь пробовали? Может быть, с помощью Google? – Pavlin

+0

Нет! что такое google ?! –

+0

Что такое 1, 4 и 7 в вашем примере? Они находятся за пределами XML-тегов. Кроме того, что полный xml? Он не имеет корневого элемента. – erik

ответ

1

В XPath 1.0 вы можете использовать функцию string на узле, чтобы получить весь текст внутри него. например string(//span[@class='price'][1]) (А если вы используете его на набор узлов, иначе массив узлов, он будет автоматически применяться только к первому узлу. See the official specification для получения более подробной информации.)

Обратите внимание, что это будет включать в себя все пробелы (т.е. '\n $\n 1\n .\n 23\n' где \n представляет новой строки, так что вы можете использовать normalize-space function удалить ведущие пробелы и заменить друг друга экземпляр пробельных с одним пробелом, который сделает результат больше похож $ 1 . 23.

Теперь, чтобы удалить $ символ из в начале я бы предложил использовать substring-after function, так как поэтому не имеет значения, действительно ли y НУ использовать вышеупомянутую normalize-space функцию, например: substring-after(normalize-space(string(//span[@class='price'])), '$')

Теперь, стоит отметить, что substring-afternormalize-space) неявно вызывает функцию string, так что вы можете смело пропустить это и просто использовать substring-after(normalize-space(//span[@class='price']), '$ '). В этом примере я изменил второй аргумент на substring-after на $, так что пространство после $ также будет удалено.