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 并允许您将 XSLT 与嵌入式 C# 或 VB.NET 代码一起使用来实现扩展功能,以下应该会有所帮助:

<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,您将需要寻找第三方 HTML 解析器,如 HTMLAgilityPack 来执行 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 回答