XSLT:XML-XML(转换文件中没有XML标记)

XSLT:XML-XML(转换文件中没有XML标记),xml,xslt-1.0,Xml,Xslt 1.0,我对XSLT非常陌生,并尝试将给定的XML文件转换为另一个XML文件 原始文件具有以下结构: <metadataContainerType xmlns:ns2="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:ns3="http://textgrid.info/namespaces/metadata/core/2010"> <ns3:object> <ns3:generic> <

我对XSLT非常陌生,并尝试将给定的XML文件转换为另一个XML文件

原始文件具有以下结构:

<metadataContainerType xmlns:ns2="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:ns3="http://textgrid.info/namespaces/metadata/core/2010">
<ns3:object>
    <ns3:generic>
        <ns3:provided>
            <ns3:title>Tfghfv</ns3:title>
            <ns3:identifier type="METSXMLID">T0072-00213-THUMB</ns3:identifier>
            <ns3:format>image/jpeg</ns3:format>
        </ns3:provided>
        <ns3:generated>
                <ns3:created>2012-11-07T11:30:20.085+01:00</ns3:created>
                <ns3:lastModified>2012-11-07T11:30:20.085+01:00</ns3:lastModified>
                <ns3:issued>2012-11-07T11:30:20.085+01:00</ns3:issued>
                <ns3:revision>0</ns3:revision>
                <ns3:extent>7055</ns3:extent>
                <ns3:project id="TGPR-1e31ce14-d7d9-3023-e8c9-501a7552a1f2">St. Matthias Test 07</ns3:project>

        </ns3:generated>
    </ns3:generic>
 </ns3:object>
</metadataContainerType>

Tfghfv
T0072-00213-拇指
图像/jpeg
2012-11-07T11:30:20.085+01:00
2012-11-07T11:30:20.085+01:00
2012-11-07T11:30:20.085+01:00
0
7055
圣马提亚测试07
我想把它转换成以下形式:

<add><doc>
    <field name="id">455HHS-2232</field>
    <field name="title">T0072-00031-DOWNLOAD - Blatt 12v</field>
    <field name="format">application/pdf</field>
    <field name="created">2012-11-07T11:15:19.887Z</field>
    <field name="last_modified">2012-11-07T11:15:19.887Z</field>
    <field name="issued">2012-11-07T11:15:19.887Z</field>
</doc></add>

455HHS-2232
T0072-00031-下载-布拉特12v
申请表格/pdf
2012-11-07T11:15:19.887Z
2012-11-07T11:15:19.887Z
2012-11-07T11:15:19.887Z
但是当我转换文件时,我忽略了XML标记,它只显示节点的内容。 也许你们中有人能帮我

我的XSLT的快照如下所示:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:ns2="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ns3="http://textgrid.info/namespaces/metadata/core/2010">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/ns3:object">
     <add><doc>

         <!-- the provided metadata fields -->
        <field name="title">
            <xsl:apply-templates select="ns3:generic/ns3:provided/ns3:title"/>
        </field>

        <field name="identifier_type">
            <xsl:value-of select="ns3:generic/ns3:provided/ns3:identifier_type"/>
        </field>


        <xsl:element name="field">
            <xsl:value-of select="ns3:generic/ns3:provided/ns3:format"/>
        </xsl:element>
    ...
    </doc></add>
</xsl:template>
</xsl:stylesheet>

...

您的模板与
/ns3:object
匹配。这意味着匹配作为根节点子节点的
ns3:object
元素。由于源XML中的
ns3:object
元素是
metadataContainerType
的子元素,而不是根节点,因此您的模板应该只匹配
ns3:object
(没有前导斜杠)。

多么愚蠢的错误,非常感谢。但我遇到了另一个问题。我必须添加xsl:stylesheet标记“xmlns:ns2=”“xmlns:ns3=”“。当我转换XML文件时,这部分被添加到“add”-标记中,它看起来是这样的:“xmlns:ns3=”“>”,但我不能在下一步使用带有此信息的标记。这似乎是一个无关的问题。请问一个新问题。