0

このコードから画像ソースを取得する必要があります。

<content:encoded>
    <![CDATA[
        <span><img width="200" src="..."></span><br /> [some Text] ]]>
</content:encoded>

これは私が試したものです:

 <xsl:variable name="ImageURL" select="substring-before(substring-after(content, 'src=&quot;'), '&quot;&gt;')" />
 <img alt="" src="{$ImageURL}" width="75" height="49" />

残念ながら、私のソリューションは失敗しました。他の構文も試しましたが、主要部分は同じでした。誰か助けてくれませんか?

ありがとうございます!

4

1 に答える 1

0

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=&quot;'), '&quot;')}" width="75" height="49"/>
  </xsl:template>
</xsl:stylesheet>
于 2012-12-14T12:51:42.543 に答える