2

我想从具有混合子节点的 xml 文件中的节点中提取内容。这是布局的副本:

<content>
  bla bal bla...
  <p />
  <img url="me3_img1.jpg"></img>blaa bal
   bla laal laal
  <p />
</content>

“p”标签建议将以下内容(图像和文本)放入下一段。图片会用html创建,图片的来源是xml中自定义img标签的URL属性。

因此输出将是:

 <div>
    <p>
      bla bal bla...
    </p>

    <p>
      <img src = "me3_img1.jpg"/>blaa bal
       bla laal laal
    </p>
  </div>

知道从哪里开始或对如何做到这一点有一个基本的想法会很有帮助。(ps:我们只允许使用1.0版本的xpath和xslt)

我设法做到了以下几点:

<xsl:for-each select="./review/content/*">
  <xsl:if test="self::text()">
    Display text
  </xsl:if>
  <xsl:if test="self::p">
    <br/>
  </xsl:if>
  <xsl:if test="self::img">
    Display image
  </xsl:if>
</xsl:for-each>

self::p 测试和 self::img 测试有效,但 self::text() 测试不起作用。我在这里做错了什么?

4

1 回答 1

1

如果 XML 看起来像这样:

<content>
    bla bal bla...
    <p />
    <img url="me3_img1.jpg">blaa bal</img>
    bla laal laal
    <p />
</content>

尝试这个:

<xsl:for-each select="review/content/node()">
        <xsl:choose>
            <xsl:when test=". = not(node())">
                <p><xsl:value-of select="./preceding::text()[1]" /></p>
            </xsl:when>
            <xsl:when test=". = text()">
                <img><xsl:attribute name="src">url('<xsl:value-of select="./@url" />' </xsl:attribute></img>
                <p><xsl:value-of select="." /></p>
            </xsl:when>
        <xsl:otherwise/>
    </xsl:choose>
</xsl:for-each>
于 2013-05-21T08:43:17.780 回答