2010-12-07 2 views
0
<A> 
    <B>Hello</B> 
    <B>Goodbye</B> 
    <B>Hello</B> 
</A> 

И этот XSL:XML в HTML с использованием XSL - проверить содержимое узла

<xsl:template match="/" > 
    <html> 
     <body> 
     <xsl:apply-templates/> 
     </body> 
    </html> 
</xsl:template> 

Я хочу XSL, чтобы только напечатать что-нибудь, где есть B узлы, содержащие "Hello".

Примечание: Я не хочу, чтобы напечатать фактическое содержимое узла («Hello»), я хочу, чтобы напечатать что-то другое, а именно:

«Приятно познакомиться» «Приятно познакомиться»

(Поскольку есть 2 узла с присутствием «Hello», а «Прощание проигнорировано»)

Спасибо!

ответ

1

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

<xsl:template match="B[text()='Hello']" > 
    Nice to meet you 
</xsl:template> 


<xsl:template match="/" > 
    <html> 
     <body> 
     <xsl:apply-templates/> 
     </body> 
    </html> 
</xsl:template> 
+0

Проблема с этим ответом - встроенные правила ... – 2010-12-07 15:38:07

0

Как вариант для Эрика, это также должно работать. Эрик более общий, так как вы можете написать шаблон для каждого типа узла, не изменяя корень шаблона. Однако, если нет соответствующего шаблона, применяется шаблон по умолчанию (что, вероятно, означает, что узел «Goobye» распечатает «Goodbye»). С другой стороны, нижеприведенное решение вызывает только вызовы-шаблоны для узлов, где «B» содержит Hello, поэтому узел «Прощай» игнорируется (или он должен делать, он непроверен, но принцип должен быть прочным :-)).

<xsl:template match="node()" > 
    Nice to meet you 
</xsl:template> 

<xsl:template match="/" > 
    <html> 
     <body> 
     <xsl:apply-templates select="/A/B[text()='Hello']" /> 
     </body> 
    </html> 
</xsl:template> 
+0

Проблема с этим ответом - неправильный XPath ... – 2010-12-07 15:38:50

0

Вам нужно три правила:

<xsl:template match="/" > 
    <html> 
     <body> 
      <xsl:apply-templates/> 
     </body> 
    </html> 
</xsl:template> 

<xsl:template match="B[contains(.,'HELLO')]"> 
    <xsl:text>Nice to meet you</xsl:text> 
</xsl:template> 

<xsl:template match="text()"/> 

Примечание: Во-первых собственное правило, второе правило для B элемента, содержащего «Hello» в его строковое значение (конкатенация всех текстовых узлов-потомков) , третье правило перезаписи встроенных текстовых узлов (выходное строковое значение) с пустым правилом (без вывода).

Смежные вопросы