XML / XSL输出显示额外信息

时间:2015-06-10 19:06:41

标签: xml xslt

这是我的xsl和xml代码。

我每次在顶部运行时都会看到日期2013.08.20,我想知道如何从输出中删除它。

XSL样式表:

    <?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:zs="http://www.loc.gov/zing/srw/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>

    <xsl:template match="zs:version">
    </xsl:template>
    <xsl:template match="zs:numberOfRecords">
    </xsl:template>
    <xsl:template match="zs:recordPosition">
    </xsl:template>

    <xsl:template match="zs:record">
    <table>
        <xsl:apply-templates/>
    </table>
    </xsl:template>

    <xsl:template match="zs:recordSchema">
    </xsl:template>
    <xsl:template match="zs:recordPacking">
    </xsl:template>
    <xsl:template match="leader">
    </xsl:template>
    <xsl:template match="controlfield">
    </xsl:template>

    <xsl:template match="datafield[@tag=245]">
        <tr><td>Name: </td><td><b>
            <xsl:for-each select="subfield[@code='a']">
                <xsl:value-of select="text()"/>,&#160;</xsl:for-each></b>
            <xsl:for-each select="subfield[@code='r']">
                <xsl:value-of select="text()"/>,&#160;</xsl:for-each>
            <xsl:for-each select="subfield[@code='g']">
                (<xsl:value-of select="text()"/>),&#160;</xsl:for-each>
            <xsl:for-each select="subfield[@code='d']">
                d. <xsl:value-of select="text()"/>&#160;</xsl:for-each>
        </td></tr>
    </xsl:template>

    <xsl:template match="datafield[@tag=856]">
        <tr><td>Links: </td><td>
            <xsl:element name="a">
               <xsl:attribute name="href">
                <xsl:value-of select="subfield[@code='u']"/>
               </xsl:attribute>
                <xsl:value-of select="subfield[@code='y']"/>
            </xsl:element>
        </td></tr>
    </xsl:template>

    <xsl:template match="datafield[@tag=857]">
        <tr><td>Image: </td><td>
            <xsl:element name="img">
               <xsl:attribute name="src">
                <xsl:value-of select="subfield[@code='u']"/>
               </xsl:attribute>
               <xsl:attribute name="alt">
                <xsl:value-of select="subfield[@code='y']"/>
               </xsl:attribute>
               <xsl:attribute name="width">
                <xsl:text>200</xsl:text>
               </xsl:attribute>
            </xsl:element>
                <xsl:value-of select="subfield[@code='y']"/>
        </td></tr>
    </xsl:template>

</xsl:stylesheet>

XML输入:

<zs:searchRetrieveResponse xmlns:zs="http://www.loc.gov/MARC21/slim">
  <zs:version>2013.08.20</zs:version>
  <zs:numberOfRecords>1</zs:numberOfRecords>
  <zs:resultSetId>5031057_1</zs:resultSetId>
  <zs:records>
    <zs:record format="WWI" type="Bibliographic">
      <zs:recordSchema>info:marcXchange</zs:recordSchema>
      <zs:recordPacking>xml</zs:recordPacking>
      <zs:recordData>
        <leader>01136nam 2200301 4500</leader>
        <controlfield tag="001">3/1</controlfield>
        <controlfield tag="003">CaONF</controlfield>
        <controlfield tag="008">150320s2015 onc 00011 eng d</controlfield>
        <controlfield tag="009">NAME</controlfield>
        <datafield tag="245">
          <subfield code="a">Farebrother, George A.</subfield>
          <subfield code="r">Sergeant</subfield>
          <subfield code="g">NiagaraFalls</subfield>
          <subfield code="d">May 26, 1918</subfield>
          <subfield code="u">
            No.2 District Depot. 3rd Bde., Canadian Field Artillery
          </subfield>
          <subfield code="k">1</subfield>
          <subfield code="p">
            NIAGARA FALLS (FAIRVIEW) CEMETERY Ontario,Canada, Family. Sec. M. Lot 76.
          </subfield>
        </datafield>
        <datafield tag="856">
          <subfield code="y">Test complex URL</subfield>
          <subfield code="2">http://</subfield>
          <subfield code="a">www.nflibrary.ca/test/test.aspx?id=</subfield>
          <subfield code="b">farebrother</subfield>
          <subfield code="c">Display=34</subfield>
        </datafield>
        <datafield tag="856">
          <subfield code="y">Canadian Virtual War Memorial</subfield>
          <subfield code="u">
            http://www.veterans.gc.ca/eng/collections/virtualmem/Detail/425501
          </subfield>
        </datafield>
        <datafield tag="856">
          <subfield code="y">War Graves Commission</subfield>
          <subfield code="u">
            http://www.cwgc.org/find-war-dead/casualty/425501/FAREBROTHER, GEORGE ALFRED
          </subfield>
        </datafield>
        <datafield tag="856">
          <subfield code="y">Book of Remembrance</subfield>
          <subfield code="u">
            http://www.veterans.gc.ca/images/collections/books/bww1/ww1405.jpg
          </subfield>
        </datafield>
        <datafield tag="856">
          <subfield code="y">National Archives</subfield>
          <subfield code="u">

          </subfield>
        </datafield>
        <datafield tag="856">
          <subfield code="y">Attestation Papers</subfield>
          <subfield code="u">
          </subfield>
        </datafield>
        <datafield tag="857">
          <subfield code="y">
          </subfield>
          <subfield code="t">
          </subfield>
        </datafield>
        <datafield tag="857">
          <subfield code="u">
          </subfield>
        </datafield>
      </zs:recordData>
      <zs:recordPosition>1</zs:recordPosition>
    </zs:record>
  </zs:records>
</zs:searchRetrieveResponse>

1 个答案:

答案 0 :(得分:0)

您的样式表似乎有几个问题

  • 您的大多数模板什么都不做;这本身并没有错,但是当它阻止其他模板被执行时它就成了一个问题;特别是,"*"的模板(应用于文档元素zs:searchRetrieveResponse)什么都不做,处理就在这里结束,没有产生任何输出;如果你真正的意思是&#34;什么都不打印并继续处理这个元素的内容&#34;你应该在该模板中使用<xsl:apply-templates/>(或者,更好的是,消除该模板,而将使用built-in one
  • 另一个模板与"zs"匹配(= name zs的元素);如果您希望它应用于zs 命名空间中的元素,您应该使用<xsl:template match="zs:*">(提示:因为此模板不执行任何操作,并且文档元素位于{{1命名空间,删除此模板,否则将无法输出)
  • 模板匹配zs,理论上可以执行某些操作,并不是真正执行的,因为输入中的"recordData"元素位于recordData命名空间中,因此{{1} } attribute应为zs
  • 您使用match,但不是在生成HTML元素;事实上,你的模板(如果它们被执行)只生成文本:你应该使用"zs:recordData"

由于您未提供预期输出的示例,因此无法为您提供更准确的建议。