[英]XSL Question XSL selecting specific field names
我想知道是否有人可以帮助我或指出正确的方向。 我目前在从 XML 文件返回正确元素时遇到了一些问题。 我只是尝试获取我拥有的大型 XML 文件的缩减版本,因此它会输出另一个 XML 文件(不是 HTML,很多教程都在上面)。
我有 XML 字段,例如:
<Field name="audio_format" value="" />
<Field name="camera" value="" />
但是,我还有更多元素要在这里列出,我有一个用于您想要包含在视频或音频文件中的所有可以想象的元数据。
所以我的问题和问题是如何在我的 XSL 中指定要抓取的字段名称,它目前正在抓取标签中的所有内容,这很好但它不正确。这里作为我的 XSL 的一点。
<!--MasterClip-->
<xsl:template match="MasterClip">
<MasterClip>
<xsl:apply-templates />
</MasterClip>
</xsl:template>
<xsl:template match="Field">
<Field>
<xsl:attribute name="name">
<xsl:value-of select="@name" />
</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="@value" />
</xsl:attribute>
</Field>
我有大约 50 个字段然后输出,但是我只想 select 我指定的那些(其中 10 个)。 我尝试了一些示例,但大多数与搜索和排序有关,任何帮助都会很棒。 即使只是一个简单的例子,向我展示如何 select 其中一个,我可以将它复制出来用于 rest..
谢谢
您可以指定谓词以将模板应用于:
<xsl:apply-templates select="/Field[@name='audio_format' or @name='camera']" />
您可以直接使用模板匹配:
<xsl:template match="Field[matches(@name,'audio_format|camera')]">
<xsl:copy-of select="."/>
</xsl:template>
matches
的只是 XSLT 2.0 function。
这可以通过使用枚举要复制的字段名称的变量来完成:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="no" />
<xsl:variable name="fields" select="'|audio_format|camera|'" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="MasterClip">
<xsl:copy>
<xsl:apply-templates select=
"*[contains($fields, concat('|', @name, '|'))]" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
鉴于此输入:
<MasterClip>
<Field name="audio_format" value="" />
<Field name="camera" value="" />
<Field name="some_other_name" value="" />
</MasterClip>
Output:
<MasterClip>
<Field name="audio_format" value="" />
<Field name="camera" value="" />
</MasterClip>
注意:此示例使用身份转换来复制Field
元素。 如果您不想要直接复制,那么只需创建一个单独的模板来处理这些元素。
另请注意:这是与 XSLT 1.0 兼容的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.