需要XSLT用于上述场景(参考问题正文)

时间:2014-08-16 18:01:25

标签: xml xslt

输入XML:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="trans.xsl"?>
<rootecf>
<XBRL>
<Name>Akhil</Name>
</XBRL>
<PI20>
<Address>Villa</Address>
</PI20>
</rootecf>

输出XML:

<?xml version="1.0"?>
<rootecf>
<XBRL>
<Name>Akhil</Name>
<PI20Addres>Villa</PI20Addres>
</XBRL>

我在这里要做的是,在输出XML中,我创建了一个名为<PI20Addres>的新标记,其值为PI20/Address标记。这里重要的一点是,我不希望XBRL标记在output XML中被硬编码,因为我有硬编码的PI20Adress标记,而是应该从输入中读取{{1}并且应对原样。

我说的原因是XML标记的名称空间将在传入的XBRL中随机更改,因此我必须复制标记而不是硬编码。

任何人都可以告诉我如何使用XML来实现这一目标?

2 个答案:

答案 0 :(得分:0)

trans.xsl可能如下所示:

<?xml version="1.0"?>

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

<xsl:template match="/">
<rootecf>
  <XBRL>
    <Name><xsl:value-of select="/rootecf/XBRL/Name"/></Name>
    <PI20Address><xsl:value-of select="/rootecf/PI20/Address"/></PI20Address>
  </XBRL>
</rootecf>
</xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

当应用于您提供的单个示例时,这将返回请求的输出:

XSLT 1.0

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/rootecf">
    <rootecf>
        <xsl:element name="{local-name(*)}">
            <Name><xsl:value-of select="*/Name"/></Name>
            <PI20Addres><xsl:value-of select="*/Address"/></PI20Addres>
        </xsl:element>
    </rootecf>
</xsl:template>

</xsl:stylesheet>