2013-03-06 48 views
0

我是XSLT新手,请原谅我的问题太重要了。XSLT到XML其中属性匹配模式

我需要改变如下XML

<annotation text="Australia" f:abc.location.adm1="AU.00" f:aliases="AUSTRALIAN" f:abc.location.population="21515754" f:abc.location.id="2077456"/> 

为名称值对。需要匹配部分属性,即转换“f:abc ....”格式的任何属性。

例如输出应该是。

<property><name>location.adm1</name><value>AU.00</value></property> 
<property><name>population</name><value>21515754</value></property> 
<property><name>location.id</name><value>2077456</value></property> 

试过代码

<xsl:template match="t:annotation[@f:abc*]"> 

,但没有成功,请求请指导我如何创建我的.xls以获得所需的输出XML。

谢谢你的时间。

回答

1

您可以通过执行此测试的那些属性:

<xsl:template match="t:annotation[@f:*[starts-with(local-name(), 'abc.')]]"> 

然后您可以利用模板像这样的东西:

<xsl:template match="t:annotation[@f:*[starts-with(local-name(), 'abc.')]]"> 
    <xsl:copy> 
    <xsl:apply-templates select="@f:*[starts-with(local-name(), 'abc.')]" /> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="@f:*[starts-with(local-name(), 'abc.')]"> 
    <property> 
     <name> 
     <xsl:value-of select="substring-after(local-name(), 'abc.')" /> 
     </name> 
     <value> 
     <xsl:value-of select="." /> 
     </value> 
    </property> 
</xsl:template> 
+0

非常感谢JLRishe,这究竟是什么我需要。 – Consultant 2013-03-06 15:50:45