过滤子值并在xsl中复制父级

时间:2017-03-22 15:20:01

标签: xml xslt

我试图从更大的元数据文件中过滤一些书籍记录。我只需要在该字段中具有特定术语的记录"权利"。如果该字段包含"インターネット公开"它应该是结果所有其他记录是真实的。

示例xml:

<ListRecords>
  <record>
    <header>
    </header>
    <metadata>
      <title>農林時報</title>
      <creator>農林省</creator>
      <rights>国立国会図書館</rights>
    </metadata>
  </record>
  <record>
    <header>
    </header>
    <metadata>
      <title>大和本草</title>
      <creator>貝原篤信</creator>
      <rights>インターネット公開(保護期間満了)</rights>
    </metadata>
  </record>
</ListRecords>

我的xsl:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/TR/REC-html40"> 

<xsl:output method="xml" encoding="utf-16" indent="no" />

<xsl:template match="@*|node()">
    <xsl:if test="contains(current(), 'インターネット公開')">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
        </xsl:if>
</xsl:template>
</xsl:stylesheet>

结果应该显示孔xml结构,但只显示具有指定术语的记录。

如果有任何帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的尝试只会复制包含自己文本值中指定字符串的元素。如果您想复制整个记录,为什么不做简单的操作:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/ListRecords">
    <xsl:copy>
        <xsl:copy-of select="record[contains(metadata/rights, 'インターネット公開')]"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>