0
下のxmlの2つのURLのハイパーリンクを作成しようとしています。 私の入力XMLメッセージはこれです:後述するように、私は、XSLを通じてXMLメッセージを入れxsl複数のURLにハイパーリンクを追加しようとしています
<comment xmlns:xs="http://www.w3.org/2001/XMLSchema">
<biid>
311
</biid>
<addComment>
<p>www.test.com works another www.test.com doesn&#39;t work</p>
</addComment>
</comment>
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="*/addComment">
<xsl:choose>
<xsl:when test="contains(.,'http://')=true()">
<addComment>
<xsl:value-of select="substring-before(.,'http://')" />
<xsl:value-of select="'&lt;a target=&quot;_blank&quot; href=&quot;'" disable-output-escaping="yes" />
<xsl:choose>
<xsl:when test="not(contains(substring-after(.,'http://'),' '))">
<xsl:value-of
select="concat('http://',substring-before(substring-after(.,'http://'),'<'))" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="concat('http://',substring-before(substring-after(.,'http://'),' '))" />
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="'&quot;&gt;'" disable-output-escaping="yes"/>
<xsl:choose>
<xsl:when test="not(contains(substring-after(.,'http://'),' '))">
<xsl:value-of
select="concat('http://',substring-before(substring-after(.,'http://'),'<'))" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="concat('http://',substring-before(substring-after(.,'http://'),' '))" />
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="'</a>'" />
<xsl:value-of
select="concat(' ',substring-after(substring-after(.,'http://'),' '))" />
</addComment>
</xsl:when>
<xsl:when test="contains(.,'www.')=true()">
<addComment>
<xsl:value-of select="substring-before(.,'www.')" />
<xsl:value-of select="'&lt;a target=&quot;_blank&quot; href=&quot;'" disable-output-escaping="yes" />
<xsl:choose>
<xsl:when test="not(contains(substring-after(.,'www.'),' '))">
<xsl:value-of
select="concat('http://www.',substring-before(substring-after(.,'www.'),'<'))" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="concat('http://www.',substring-before(substring-after(.,'www.'),' '))" />
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="'&quot;&gt;'" disable-output-escaping="yes"/>
<xsl:choose>
<xsl:when test="not(contains(substring-after(.,'www.'),' '))">
<xsl:value-of
select="concat('http://www.',substring-before(substring-after(.,'www.'),'<'))" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="concat('http://www.',substring-before(substring-after(.,'www.'),' '))" />
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="'</a>'" />
<xsl:value-of
select="concat(' ',substring-after(substring-after(.,'www.'),' '))" />
</addComment>
</xsl:when>
<xsl:otherwise>
<addComment>
<xsl:apply-templates />
</addComment>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
しかし、唯一の1つのURLがハイパーリンクしている結果のxml:
<?xml version="1.0" encoding="UTF-8"?><comment xmlns:xs="http://www.w3.org/2001/XMLSchema">
<biid>
311
</biid>
<addComment>
<p><a target="_blank" href="http://www.test.com">http://www.test.com</a> works another www.test.com doesn&#39;t work</p>
</addComment>
</comment>
最初のwww.test.comはハイパーリンクされており、2番目のwww.test.comはハイパーリンクされていません。どのように私はそれらの両方がハイパーリンクされて達成するために管理することができますか?
XSLTプロセッサを使用している:
ここでは、あなたの出発点として使用することができます簡単な例ですか? –
@michael私はibisアダプタフレームワークを使用していますが、このフレームワークはxalan xsltプロセッサを使用しています。 – fasln01
なぜあなたのスタイルシートは 'version =" 2.0 "'と言っていますか? XalanはXSLT 1.0のみのプロセッサです。 - ちなみに、可能であれば、正規表現を使用できるXSLT 2.0プロセッサに移行することをお勧めします。そうしないと、 'http:'、 '' www.'と 'http:// www.'である。 –