0

私には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>まだ残っています。それらを取り除く方法はありますか?

4

2 に答える 2

2

オーバーライドする必要のある組み込みのテンプレートがあります

<xsl:template match="text()"/>

またはで使用されないようにする

<xsl:template match="/">
  <xsl:apply-templates select="response/result"/>
</xsl:template>
于 2012-08-22T10:51:33.497 に答える
1

これをテンプレートに追加するだけです。<xsl:template match="text() | @*"/> テキストノードと属性に一致し、テンプレートが空であるため、それらには何もしません。これは実際には「組み込みテンプレート」です-> 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>
于 2012-08-22T10:50:22.340 に答える