我想删除XSLT中两个字符串和节点之间的空间。我正在使用XSLT 2.0
输入:
<p type="c"><doc ref="core" id="k12234"><t/>AWS H <t/>(ever over)<t/></doc><refformat="no" ref="core" rid="ck1123"/>00</p>
输出应为:
<p type="c"><doc ref="core" id="k12234"><t/>AWS H<t/>(ever over)<t/></doc><refformat="no" ref="core" rid="ck1123"/>00</p>
AWS H
和<t/>
之间的空格应从输出中删除。
答案 0 :(得分:1)
输入
<?xml version="1.0" encoding="UTF-8"?>
<root>
<ajeet>aaaaa </ajeet>
<kumar> bbbbb</kumar>
</root>
xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<singh><xsl:value-of select="normalize-space(//ajeet)"/></singh>
</xsl:template>
</xsl:stylesheet>
输出:-
<?xml version="1.0" encoding="UTF-8"?>
<singh>aaaaa</singh>
答案 1 :(得分:1)
如果要删除后跟<t />
节点的任何文本节点的尾随空格,可以执行此操作。...
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="no"/>
<xsl:template match="text()[following-sibling::node()[1][self::t]]">
<xsl:value-of select="replace(., '\s+$', '')" />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
请注意,您可以在此处使用normalize-space
而不是replace
,但这也将删除前导空格,这可能是您可能想要的,也可能不是。
请注意,如果您只想定位以AWS
开头的文本节点,则可以像这样调整模板匹配:
<xsl:template match="text()[starts-with(., 'AWS')][following-sibling::node()[1][self::t]]">
答案 2 :(得分:0)
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
Try this using normalize-space
答案 3 :(得分:0)
请参见下面的代码,仅在“ text()节点与
输入XML:
<root>
<p type="c"><doc ref="core" id="k12234">The <ii>pp</ii> the <t/>AWS H <t/>(ever over) <l>the </l><t/></doc><ref format="no" ref="core" rid="ck1123"/>00</p>
<p type="c"><doc ref="core" id="k12234"><t/>AWS H <t/>(ever over)<t/></doc><ref format="no" ref="core" rid="ck1123"/>00</p>
</root>
XSLT:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
<xsl:template match="doc">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:for-each-group select="node()"
group-adjacent="exists(following-sibling::node()[1][self::t]) and self::text()">
<xsl:choose>
<xsl:when test="current-grouping-key()">
<xsl:value-of select="normalize-space()"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
结果:
<root>
<p type="c"><doc ref="core" id="k12234">The <ii>pp</ii>the<t/>AWS H<t/>(ever over) <l>the </l><t/></doc><ref format="no" ref="core" rid="ck1123"/>00</p>
<p type="c"><doc ref="core" id="k12234"><t/>AWS H<t/>(ever over)<t/></doc><ref format="no" ref="core" rid="ck1123"/>00</p>
</root>