我正在尝试编写一个替换某些预定标签的xslt,并完全删除所有其他标签(但递归地将相同的规则应用于其内容)。
例如,我想删除除“domanda”之外的所有标签。如果有一个我想删除的标记(例如“risposta”),并且它包含一个“domanda”标记,我期望的结果是递归地将相同的规则应用于“risposta”元素的内容:必须删除“risposta”标签,但必须保留其所有文字内容和“domanda”标签。
到目前为止,我提出了以下(标准)xslt,它复制了所有元素并转换了名为“domanda”的元素。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" />
<xsl:output method="xml" indent="yes" encoding="utf-8"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="domanda">
<DOMANDA>
<xsl:copy-of select="./node()"/>
</DOMANDA>
</xsl:template>
<xsl:template match="p">
<p>
<xsl:copy-of select="./node()"/>
</p>
</xsl:template>
</xsl:stylesheet>
如何使用删除所有未指定标记的规则完成此xslt?
输入示例:
<testo>
<p class="p@2">«È una vittoria schiacciante, politicamente schiacciante.
Al di là dei numeri parlamentari, cioè della possibilità che Syriza
abbia la maggioranza assoluta». Nichi Vendola, leader di Sel, è
ovviamente raggiante per la vittoria del leader della sinistra greca.
</p>
<domanda class="domanda">Vendola, qual è il segnale che arriva dal
risultato greco?</domanda>
<risposta class="risposta">«Il mio primo pensiero va alla riscossa di un
popolo umiliato dalle politiche dell’austerity europea. La democrazia
riaggancia la vita e la rappresenta. E apre la possibilità di ridare
speranza a questa Europa rinchiusa nelle sue politiche, micidiali per
i popoli e sterili per il futuro».</risposta>
<domanda class="domanda">Finora però non sembrava che il mondo della
sinistra europea guardasse con ottimismo alla Grecia di Syriza.
</domanda>
<risposta class="risposta">«Invece l’intero Partito del socialismo
europeo ha tifato nell’ombra proprio per Tsipras. Sperano in Tsipras
perché sono consapevoli del disastro che ha provocato il rigore
voluto dalla Merkel, c’è una <p>HELLOOOOOOO</p>voragine sociale che si è aperta sotto i
piedi della democrazia. Qualsiasi sinistra, anche la più moderata,
non può non rendersene conto. E non può non vedere che la Grecia apre
uno spiraglio».</risposta>
<domanda class="domanda">Tsipras come un cavallo di Troia, per restare
in tema?</domanda>
<risposta class="risposta" id="U10401624295425M7">«Semmai come Enea che si carica
sulle spalle il vecchio padre e ricomincia il viaggio, un nuovo
inizio».</risposta>
</testo>
预期输出(指定我要在<domanda>
中翻译<DOMANDA>
并保留<testo>
和<p>
标记):
<testo>
<p class="p@2">«È una vittoria schiacciante, politicamente schiacciante.
Al di là dei numeri parlamentari, cioè della possibilità che Syriza
abbia la maggioranza assoluta». Nichi Vendola, leader di Sel, è
ovviamente raggiante per la vittoria del leader della sinistra greca.
</p>
<DOMANDA class="DOMANDA">Vendola, qual è il segnale che arriva dal
risultato greco?</DOMANDA>
«Il mio primo pensiero va alla riscossa di un
popolo umiliato dalle politiche dell’austerity europea. La democrazia
riaggancia la vita e la rappresenta. E apre la possibilità di ridare
speranza a questa Europa rinchiusa nelle sue politiche, micidiali per
i popoli e sterili per il futuro».
<DOMANDA class="DOMANDA">Finora però non sembrava che il mondo della
sinistra europea guardasse con ottimismo alla Grecia di Syriza.
</DOMANDA>
«Invece l’intero Partito del socialismo
europeo ha tifato nell’ombra proprio per Tsipras. Sperano in Tsipras
perché sono consapevoli del disastro che ha provocato il rigore
voluto dalla Merkel, c’è una <p>HELLOOOOOOO</p>voragine sociale che si è aperta sotto i
piedi della democrazia. Qualsiasi sinistra, anche la più moderata,
non può non rendersene conto. E non può non vedere che la Grecia apre
uno spiraglio».
<DOMANDA class="DOMANDA">Tsipras come un cavallo di Troia, per restare
in tema?</DOMANDA>
«Semmai come Enea che si carica
sulle spalle il vecchio padre e ricomincia il viaggio, un nuovo
inizio».
</testo>
risposta(但可以是未指定的任何标签)已被删除。
由于
答案 0 :(得分:2)
如果您知道要保留的所有元素名称(例如presto
,p
),请以
<xsl:template match="presto | p">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:copy/>
</xsl:template>
然后为要转换的元素添加模板
<xsl:template match="domanda">
<DOMANDA>
<xsl:apply-templates select="@* | node()"/>
</DOMANDA>
</xsl:template>
但不要包含您先拥有的通用模板。
答案 1 :(得分:2)
您可以这样做:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" />
<xsl:output method="xml" indent="yes" encoding="utf-8"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="domanda">
<DOMANDA>
<xsl:apply-templates/>
</DOMANDA>
</xsl:template>
<xsl:template match="*[not(self::domanda)]">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
您可以将self::domanda
替换为self::domanda or self::domanda1
,依此类推