有没有办法将几个XML文档的部分组合成一个?

时间:2017-10-17 19:03:45

标签: xml xslt

我有几个XML文档都包含有关同一项的元数据信息。对于一个元素,XML文档是相同的。有没有办法,使用XSLT,将这些多个文档转换为一个包含所有信息的输出XML? 在我单独的文档中,我的元数据看起来像这样:

<pbcorePart>
  <pbcoreIdentifier source="something" 
                    annotation="Object Identifier"
    >filename_t10</pbcoreIdentifier>
  <!-- a bunch of other stuff about this item -->
</pbcorePart>

但我最终需要的是一个XML文件,它使用关系标记将所有部分组合到一个文档中,所以它看起来像这样:

  <pbcoreRelation>
    <pbcoreRelationType>has part</pbcoreRelationType>
    <pbcoreRelationIdentifier>filename_t01</pbcoreRelationIdentifier>
  </pbcoreRelation>
  <pbcoreRelation>
    <pbcoreRelationType>has part</pbcoreRelationType>
    <pbcoreRelationIdentifier>filename_t02</pbcoreRelationIdentifier>
  </pbcoreRelation>
  <pbcoreRelation>
    <pbcoreRelationType>has part</pbcoreRelationType>

有没有办法通过XSLT转换来实现这一目标?

我在创建XSLT方面还很陌生,我已经尝试过这个但是它不起作用:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="http://www.pbcore.org/PBCore/PBCoreNamespace.html">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>



<xsl:template match="@* | node()">

    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="test">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
        <xsl:apply-templates select="document('csmha_000110_t03.xml')/pbcoreDescriptionDocument/pbcorePart"/>
        <xsl:apply-templates select="document('csmha_000110_t04.xml')/pbcoreDescriptionDocument/pbcorePart"/>
    </xsl:copy>
</xsl:template>

0 个答案:

没有答案