我想使用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>
答案 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'是根元素,名称空间可以在那里声明。