使用XSL模板将XML文件转换为另一个XML文件

时间:2016-08-18 23:52:50

标签: xml xslt xpath

我想使用XSLT样式表将XML转换为另一种XML。

这是我输入XML的一部分,我必须使用XSL模板(input.xml):

 ...
    <extension>
        <og:image>http://www.example.com/images/logos/logo-example-PNG.png</og:image>
        <og:type>article</og:type>
        <resourceName>http://www.example.com/big-data-search-managed-services-questions</resourceName>
    </extension>
   .......

我希望我的XML(output.xml)看起来像这样:

....
<MT N="og:image" V="http://www.example.com/images/logos/logo-example-PNG.png"/>
<MT N="og:type" V="article"/>
<MT N="resourceName" V="http://www.example.com/big-data-search-managed-services-questions"/>
...

我正在尝试使用XSLT。但我被困在XSL模板部分。我希望我的XSLT进入扩展的XPATH,并为扩展内的每个元素指定一个模板,以转换为这种形式:

<MT N="" V=""/>

&#34; N&#34;使用标签名称和&#34; V&#34;使用标签的值

我应该在XSLT中指定什么?

 <xsl:template match="/extension">
    ....
    </xsl:template>

1 个答案:

答案 0 :(得分:1)

试试这个:

<强> XML:

<extension xmlns:og="http://og.com">
 <og:image>http://www.example.com/images/logos/logo-example-PNG.png</og:image>
 <og:type>article</og:type>
 <resourceName>http://www.example.com/big-data-search-managed-services-questions</resourceName>
</extension>

<强> XSLT:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:og="http://og.com">

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

<xsl:template match="extension">
    <xsl:for-each select="*">
        <xsl:element name="MT">
            <xsl:attribute name="N" select="name()"/>
            <xsl:attribute name="V" select="."/>
        </xsl:element>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

<强>输出:

<MT N="og:image" V="http://www.example.com/images/logos/logo-example-PNG.png"/>
<MT N="og:type" V="article"/>
<MT N="resourceName" V="http://www.example.com/big-data-search-managed-services-questions"/>

已编辑的输入XML:

<root  xmlns:og="http://og.com">
 <extension>
  <og:image>http://www.example.com/images/logos/logo-example-PNG.png</og:image>
  <og:type>article</og:type>
  <resourceName>http://www.example.com/big-data-search-managed-services-questions</resourceName>
 </extension>
</root>

这里'root'是根元素,名称空间可以在那里声明。