XSL值返回不匹配

时间:2013-08-23 16:43:41

标签: xml xslt xpath

好吧我正在尝试使用XSLT将XHTML文档转换为RDF / XML(不要问,这是一项任务),其中RDF文件的信息位于XHTML文档中的元标记中。我完成了第一个XPath查询,以找到about <rdf:Description>属性的值。我在一个单独的网站上测试了XPath查询,它返回了正确的结果。但是,当我尝试将其合并到我的XSLT中时,结果是一个空字符串。

我只是想朝着正确的方向努力。我不知道我哪里错了。这是示例XHTML文档。

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="TN6_Q6.xsl" type="text/xsl" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
    <meta name="DC.title" content="le titre de mon document" />
    ...
    <title>...</title>
  </head>
  <body>
    ...
  </body>
</html>

这是我到目前为止构建的XSLT。我知道它看起来很糟糕但又一次......这就是作业。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:template match="*">
<html><body><pre>
&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;
&lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" &gt;
&lt;rdf:Description rdf:about="

  <!-- THIS LINE -->
  <xsl:value-of select="html/*[local-name()='head']/*[local-name()='link']/@href"/>"&gt;

&lt;/rdf:Description&gt;
&lt;/rdf:RDF&gt;
</pre></body></html>
</xsl:template>
</xsl:stylesheet>

您可以在此处测试XPath: http://www.xpathtester.com/saved/85785aab-0449-472e-a94f-77ee49d4e330

1 个答案:

答案 0 :(得分:1)

您的模板与"*"匹配,因此评估value-of时的上下文节点将是根html元素。因此,您只需要从head

开始路径
<xsl:value-of select="*[local-name()='head']/*[local-name()='link']/@href"/>

或者比local-name()技巧更好的方法是使用你在<xsl:stylesheet>中声明名称空间并在路径中使用相应的限定名称的事实:

<xsl:value-of select="xhtml:head/xhtml:link/@href" />

您也可以考虑将模板更改为match="/"而不是match="*",在这种情况下,上下文将是文档根节点而不是html元素,因此您需要将html添加到路径的前面:

<xsl:value-of select="xhtml:html/xhtml:head/xhtml:link/@href" />