如何使用xsl获取在xml中运行的url?

时间:2014-12-09 08:31:09

标签: html xml url xslt href

我的xml文件中有这样的东西

    <tutor>
        <heading>tutor</heading>
        <p>paragraph</p>
        <p>paragraph one two <a href="http://three.com">three</a> four give</p>
        <ul>
            <li>item</li>
            <li>item</li>
            <li>item</li>
        </ul>
        <p>paragraph</p>
        <p>paragraph<a href="http://acho.com">test</a> one two two three</p>
        <p>paragraph</p>
        <p>paragraph</p>
    </tutor>

如何使用xsl正确输出链接?我尝试应用模板并使用for-each但是无法正确执行我在我的xsl文件中有这样的东西

  <xsl:template match="tutor">
    <h4><xsl:value-of select="./heading" /></h4>
    <p><xsl:value-of select="./p" /></p>
    <a href="{./p/a/@href}"><xsl:value-of select="./p/a" /></a>
  </xsl:template>

但是类似的东西却无法正确行事。有人可以帮我一把吗?感谢

我想要的输出就像....

tutor
paragraph
paragraph one two three four give
the bullet lists and so on

,其中三个将是一个链接,就像在html中输出内容一样

1 个答案:

答案 0 :(得分:1)

您当前陈述的问题......

...这只是在XML中的第一个a元素中寻找p元素,这不是这里的情况。

如果您的XML已包含有效的HTML元素,则只需使用XSLT Identity Template输出它们

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

然后,您只需要为希望更改的XML元素编写模板。例如,您不想输出tutor元素,因此您可以添加模板以跳过它

<xsl:template match="tutor">
    <xsl:apply-templates/>
</xsl:template>

要将heading更改为h4,您需要编写一个这样的模板

<xsl:template match="heading">
    <h4><xsl:apply-templates/></h4>
</xsl:template>

所有其他元素pa以及ul将按原样输出。

试试这个XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" indent="yes" />

    <xsl:template match="tutor">
        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="heading">
        <h4><xsl:apply-templates/></h4>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>