2015-10-30 4 views

ответ

1

Это XPath подберет текстовые узлы, которые являются непосредственными потомками p

//div[@class='content']/div/p/text() 

и, следовательно, исключат "TEXT 2" и "TEXT 3".

Вы можете предпочесть, чтобы устранить начальные и конечные пробелы (и заменить повторный внутренний пробел, но не важно здесь):

//div[@class='content']/div/p/text()[normalize-space()] 

принимает значение «TEXT 1» в обоих XPath 1.0 и XPath 2.0.

1

Попробуйте это:

<xsl:value-of select="text()"/> 

Вы, вероятно, сделал <xsl:value-of select="."/>, который принимает текущий узел и преобразовать его рекурсивно к тексту. text() выбирает только текстовые узлы, исключая дочерние элементы и атрибуты.

Вот полный XSLT для контекста:

<?xml version="1.0"?> 
<xsl:stylesheet 
     version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> 
     <xsl:template match="p"> 
       <out> 
         <xsl:value-of select='text()'/> 
       </out> 
     </xsl:template> 

</xsl:stylesheet> 
1

Попробуйте XPath:

$x("(//div[@class='content']/div/p/text())[1]"); 

Может быть, это не quietely эффективным, но это, кажется, делать свою работу :) Обратите внимание, что [1] будет получить первое вхождение текста, если вы измените положение текста, оно не будет работать должным образом.

С уважением, Andrea.