Sharepoint WebPart が XslCompiledTransform を使用し、C# または VB.NET コードが埋め込まれた XSLT を使用して拡張機能を実装できると仮定すると、次のことが役立ちます。
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
exclude-result-prefixes="msxsl mf content"
xmlns:mf="http://example.com/mf"
>
<msxsl:script implements-prefix="mf" language="C#">
<msxsl:using namespace="System.IO"/>
public XPathNavigator ParseFragment(string markupFragment)
{
using (StringReader sr = new StringReader(markupFragment))
{
using (XmlReader xr = XmlReader.Create(sr,
new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment }))
{
XPathDocument doc = new XPathDocument(xr);
return doc.CreateNavigator();
}
}
}
</msxsl:script>
<xsl:output method="html"/>
<xsl:template match="content:encoded">
<xsl:apply-templates select="mf:ParseFragment(.)/span/img"/>
</xsl:template>
<xsl:template match="img">
<img alt="" src="{@src}" width="75" height="49" />
</xsl:template>
</xsl:stylesheet>
ただし、CDATA セクションのマークアップに XML パーサーを適用するには、XML 構文規則に準拠する必要があるため、X(HT)ML を次のように解析することに注意してください。
<content:encoded>
<![CDATA[
<span><img width="200" src="foo.png"/></span><br /> [some Text] ]]>
</content:encoded>
動作しますが、次のような HTML を解析します
<content:encoded>
<![CDATA[
<span><img width="200" src="foo.png"></span><br> [some Text] ]]>
</content:encoded>
動作しないでしょう。残念ながら、.NET フレームワーク クラス ライブラリには HTML 解析 API が付属していないため、content:encoded
要素のコンテンツが HTML の場合、HTMLAgilityPack のようなサード パーティの HTML パーサーを探して、私のサンプルで XPathDocument が行う仕事を実行する必要があります。 XPath 1.0 の不十分な文字列解析サポートが残っています。
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl content"
>
<xsl:template match="content:encoded">
<img alt="" src="{substring-before(substring-after(., 'src="'), '"')}" width="75" height="49"/>
</xsl:template>
</xsl:stylesheet>