我有一个XSLT
转换:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"
indent="yes"
version="1.0"
encoding="UTF-16"
standalone="yes"
cdata-section-elements="title date referencenumber url company city state country postalcode description salary education jobtype category experience"/>
<xsl:param name="currentDate"/>
<xsl:template match="/response/result">
<source>
<xsl:for-each select="//doc">
<job>
<title>
<xsl:value-of select="str[@name='title']"/>
</title>
<date>
<xsl:value-of select="date[@name='ds_field_ad_publish']"/>
</date>
<referencenumber>
<xsl:value-of select="int[@name='nid']"/>
</referencenumber>
</job>
</xsl:for-each>
</source>
</xsl:template>
</xsl:stylesheet>
这是我的XML
文件:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">4</int>
<lst name="params">
<str name="wt">xml</str>
<str name="fq">type:ad_vacancy is_organisation_nid:190908</str>
<str name="rows">1000000</str>
</lst>
</lst>
<result name="response" numFound="2" start="0">
<doc>
<!-- all my values -->
</doc>
<doc>
<!-- all my values -->
</doc>
<doc>
<!-- all my values -->
</doc>
</result>
</response>
我正在匹配/response/result
,然后循环遍历所有<doc>
元素。一切正常,但在我的文档的顶部,我看到<lst>
元素的值。像这样:
0
4
xml
type:ad_vacancy is_organisation_nid:190908
1000000
我需要以某种方式逃脱整个街区,我的转变与之不相符。我尝试过不同的表达方式:<xsl:template match="//response/result">
,<xsl:template match="//response//result">
。我还尝试将其添加到我的变形中:
<xsl:template match="/*">
<xsl:apply-templates/>
</xsl:template>
但这也没有帮助。来自<lst>
的值仍然存在。有没有办法摆脱它们?
答案 0 :(得分:2)
您需要使用
覆盖内置模板<xsl:template match="text()"/>
或阻止与
一起使用<xsl:template match="/">
<xsl:apply-templates select="response/result"/>
</xsl:template>
答案 1 :(得分:1)
只需将其添加到您的模板中:<xsl:template match="text() | @*"/>
它匹配文本节点和属性,因为模板是空的,所以它们对它们没有任何作用。它实际上是一个“内置模板” - &gt; http://www.w3.org/TR/xslt#built-in-rule
您编辑的XSLT如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"
indent="yes"
version="1.0"
encoding="UTF-16"
standalone="yes"
cdata-section-elements="title date referencenumber url company city state country postalcode description salary education jobtype category experience"/>
<xsl:param name="currentDate"/>
<xsl:template match="text() | @*"/>
<xsl:template match="/response/result">
<source>
<xsl:for-each select="//doc">
<job>
<title>
<xsl:value-of select="str[@name='title']"/>
</title>
<date>
<xsl:value-of select="date[@name='ds_field_ad_publish']"/>
</date>
<referencenumber>
<xsl:value-of select="int[@name='nid']"/>
</referencenumber>
</job>
</xsl:for-each>
</source>
</xsl:template>
</xsl:stylesheet>
祝你好运, 彼得