Как исключить поле в XSLT? - PullRequest
2 голосов
/ 28 апреля 2011

Я беру информацию из таблицы:

<xsl:template match="table1">
  <xsl:element name="ApplicantAddress">
    <xsl:apply-templates select="@* | node()"/>
  </xsl:element>
</xsl:template>

И я хочу убедиться, что я не включил поле из этой таблицы. Это возможно?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2011

Стиль толчка:

<xsl:template match="table1">
   <ApplicantAddress>
     <xsl:apply-templates select="@* | node()[not(self::unwanted-element)]"/>
   </ApplicantAddress>
</xsl:template>

Стиль тяги:

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

<xsl:template match="table1/unwanted-element"/>
0 голосов
/ 28 апреля 2011

Это преобразование :

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

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

 <xsl:template match="c"/>
</xsl:stylesheet>

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

<table1>
 <a/>
 <b/>
 <c/>
 <d/>
</table1>

дает желаемый результат (элемент b не скопирован):

<ApplicantAddress>
  <a />
  <b />
  <d />
</ApplicantAddress>

Объяснение : использование и переопределение правила идентификации / template - самый фундаментальный шаблон проектирования XSLT.Здесь мы переопределяем правило идентификации с помощью шаблона пустого тела, соответствующего c, и это гарантирует, что этот элемент игнорируется («удален» / не скопирован).

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