我正在尝试创建一个xsl文件,该文件将通过xml文件,并且只处理以某组字符开头的标记。我应该提一下,我对xsl文件相当新,所以这可能很容易实现,但我只是不知道如何。
我的xml文件与此类似:
<generic_etd>
<associated_tags>
<master>
<dc.contributor>contributor</dc.contributor>
</master>
<related>
<dc.contributor.role>contributor role</dc.contributor.role>
</related>
</associated_tags>
<associated_tags>
<master>
<dc.contributor>sponsor</dc.contributor>
</master>
<related>
<dc.contributor.role>sponsor role</dc.contributor.role>
</related>
</associated_tags>
<dc.creator>gradstudent2</dc.creator>
<dc.date>2014-02-11</dc.date>
<dc.description>description</dc.description>
<thesis.degree.discipline>Business Administration</thesis.degree.discipline>
<generic_etd>
我希望我的xsl文件只处理以'dc。'开头的标签。
这是我到目前为止提出的xsl文件:
<xsl:template match="*">
<xsl:choose>
<!-- Process the tags we are interested in -->
<xsl:when test="contains(name(),'dc.')">
<xsl:variable name="newtag" select="concat('dc:',substring-after(name(),'.'))"/>
<xsl:choose>
<xsl:when test="contains($newtag, '.')">
<xsl:element name="{substring-before($newtag,'.')}">
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{$newtag}">
<xsl:apply-templates/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose>
</xsl:template>
但是,它生成的文件缺少输出中的dc.contributor和dc.contributor.role。实际上,我想在此示例中排除dc.contributor.role,但我需要在我正在处理的另一个文件中。
我的问题是我哪里出错?
感谢。
答案 0 :(得分:0)
这是一个示例样式表。它直接匹配以dc
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dc="http://www.example.com">
<xsl:output method='xml' indent='yes'/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:namespace name="dc">http://www.example.com</xsl:namespace>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(),'dc.')]">
<xsl:variable name="newtag" select="concat('dc:',substring-after(name(),'.'))"/>
<xsl:element name="{$newtag}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>