【问题标题】:XSLT: combine multiple unrelated elements into one elementXSLT:将多个不相关的元素组合成一个元素
【发布时间】:2017-03-23 20:15:03
【问题描述】:

我正在将合格的都柏林核心转换为 MODS。我需要将两个元素合二为一,而我在这里找到的其他帖子不适用,因为它们在父元素上匹配。

Dublin Core 在 XSLT 方面存在问题,因为它没有父元素和子元素……所以我不确定该选择哪个。

这是一些示例输入(重要的位是 dc:coverage 元素):

<?xml version="1.0"?>   
  <oai_dc:dc (schema etc.)>
        <dc:title>This is the title</dc:title>
        <dc:creator>Author McAuthorson</dc:creator>
        <dc:type>Article</dc:type>
        <dc:coverage.spatial.lat>49.101</dc:coverage.spatial.lat>
        <dc:coverage.spatial.long>-122.720</dc:coverage.spatial.long>
  </oai_dc:dc>

这是我需要的 dc:coverage 元素的输出:

<subject>
  <cartographics>
    <coordinates>49.101, -122.720</coordinates>
  </cartographics>
</subject>

我已经阅读了可以处理具有相同名称的不同元素的解决方案,但没有可以将具有不同名称的两个元素组合在一起的解决方案。我已经尝试将这些设置为变量,但无法弄清楚如何将变量从一个模板(例如匹配 dc:coverage.spatial.lat)传递到下一个模板(匹配 dc:coverage.spatial.long)。所以我有点盲目。

任何建议(或我找不到的适用答案的链接)将不胜感激。

【问题讨论】:

  • 同一父级下是否可以有多个纬度/经度对(在您的示例中为oai_dc:dc)?
  • 不 - 每条记录只有一组纬度/经度对。
  • 我会质疑您自学 XSLT 的策略。您无法通过在网上搜索完全符合您要求的示例来学习编程语言。您需要学习这些原则并掌握构建块,以便您可以将它们结合起来为您的特定问题创建自己的解决方案。如果您不知道如何将变量从一个模板传递到另一个模板,那么您就没有从正确的位置获取信息。给自己买一本好的 XSLT 书,然后阅读。

标签: xml xslt dublin-core


【解决方案1】:

为什么不能简单点:

<xsl:template match="/oai_dc:dc">
    <subject>
        <cartographics>
            <coordinates>
                <xsl:value-of select="dc:coverage.spatial.lat" />
                <xsl:text>, </xsl:text>
                <xsl:value-of select="dc:coverage.spatial.long" />
            </coordinates>
        </cartographics>
    </subject>
</xsl:template>

【讨论】:

  • michael.hor257k:试一试...不起作用,因为这只是一个更大的 XSLT 的一小部分(比我的示例中包含更多的元素)。此解决方案产生的输出忽略所有其他元素/转换。
  • @Brandon 您需要添加代码来处理要包含在输出中的其他节点。不幸的是,我无法知道这些可能是什么以及如何处理它们。请查看:minimal reproducible example.
猜你喜欢
  • 2017-03-23
  • 2014-06-16
  • 2021-09-19
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
相关资源
最近更新 更多