XSL выводит все, включая имя узла, атрибуты, текст - PullRequest
2 голосов
/ 11 декабря 2011

В XSLT, есть ли простой способ вывести все переменные?

Моя переменная выглядит примерно так:

<node a="a">
  a
  <node>
    b
  </node>
</node>

Поэтому я хочу вывести ее в том виде, в котором она содержит тегимена, атрибуты, текст и т. д.

Спасибо!

AND:

можно ли не выводить некоторые теги?например,

<a>aa
<b>bb
<c>cc</c></b></a> 

я хочу избежать вывода тега b, но хочу вывести c?Спасибо!

Ответы [ 2 ]

3 голосов
/ 11 декабря 2011
<xsl:copy-of select="$variable"/>
1 голос
/ 11 декабря 2011

Хороший вопрос, + 1.

Эта трансформация дает ответы на оба ваших вопроса :

<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="vVarNode" select="/*/node"/>

 <xsl:variable name="vVarA" select="/*/a"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="/">
  <xsl:copy-of select="$vVarNode"/>
  ===========

  <xsl:apply-templates select="$vVarA"/>
 </xsl:template>

 <xsl:template match="b">
  <xsl:apply-templates select="*"/>
 </xsl:template>
</xsl:stylesheet>

при применении к этому документу XML (из которого "загружаются" две переменные):

<doc>
 <node a="a">
    a
    <node>
     b
    </node>
 </node>

 <a>aa
  <b>bb
    <c>cc</c>
  </b>
 </a>
</doc>

желаемый, правильный результат получен (Содержимое первой переменной выводится «как есть», тогда как b и его дочерние элементы текстового узла «удаляются» из того, что выводится из содержимого второй переменной):

<node a="a">
    a
    <node>
     b
    </node>
</node>
  ===========

  <a>aa
  <c>cc</c>
</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...