很少添加,这个例子是更大的xml的一部分,希望我澄清它。
我有一个xml文件的以下部分:
<smartdocuments_root_node xmlns="http://com.logica.digimeente.zaaksysteem">
<Zaak>
<ZaakNummer>21773</ZaakNummer>
<ZaakID>21768</ZaakID>
<Titel>Melding klein evenement De grote Kompanjie Barbeque!</Titel>
<Kenmerken>
<Kenmerk>
<KenmerkType>Starttijd evemenent</KenmerkType>
<Omschrijving>Starttijdevemenent</Omschrijving>
<Waarde>15:00</Waarde>
</Kenmerk>
<Kenmerk>
<KenmerkType>evement namens</KenmerkType>
<Omschrijving>evement namens</Omschrijving>
<Waarde>De Kompanjie</Waarde>
</Kenmerk>
<Kenmerk>
<KenmerkType>Datum evenement</KenmerkType>
<Omschrijving>Datumevenement</Omschrijving>
<Waarde>20171101</Waarde>
</Kenmerk>
</Kenmerken>
</Zaak>
</smartdocuments_root_node>
我想得到的是:
<smartdocuments_root_node xmlns="http://com.logica.digimeente.zaaksysteem">
<Zaak>
<ZaakNummer>21773</ZaakNummer>
<ZaakID>21768</ZaakID>
<Titel>Melding klein evenement De grote Kompanjie Barbeque!</Titel>
<Kenmerken>
<Kenmerk1>
<KenmerkType>Starttijd evemenent</KenmerkType>
<Omschrijving>Starttijdevemenent</Omschrijving>
<Waarde>15:00</Waarde>
</Kenmerk1>
<Kenmerk2>
<KenmerkType>evement namens</KenmerkType>
<Omschrijving>evement namens</Omschrijving>
<Waarde>De Kompanjie</Waarde>
</Kenmerk2>
<Kenmerk3>
<KenmerkType>Datum evenement</KenmerkType>
<Omschrijving>Datumevenement</Omschrijving>
<Waarde>20171101</Waarde>
</Kenmerk3>
</Kenmerken>
</Zaak>
</smartdocuments_root_node>
或者使用<KenmerkType>
中的值重命名Kenmerk节点。
任何人都可以帮助我吗?
答案 0 :(得分:0)
您可以从identity template
开始,按原样复制输入数据。
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<Kenmerk>
元素需要修改为<Kenmerk1>
,<Kenmerk2>
,依此类推。 请注意,不应该是节点名称中的空格 ,因此无法追加<KenmarkType>
的值。为了重命名节点,您可以使用节点名称创建变量,并将节点的位置附加到该变量。
<xsl:variable name="newNodeName" select="concat(local-name(), position())" />
修改强> 修改后的输入XML现在具有带名称空间的根元素。
<smartdocuments_root_node xmlns="http://com.logica.digimeente.zaaksysteem">
这表示所有元素都属于此命名空间,并且必须在XSLT中访问时使用命名空间的别名来标识。此处使用了别名abc
作为示例。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:abc="http://com.logica.digimeente.zaaksysteem" >
然后使用别名访问元素。
<xsl:template match="abc:Kenmerk">
以下是完整的XSLT。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:abc="http://com.logica.digimeente.zaaksysteem" >
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<xsl:template match="abc:Kenmerk">
<xsl:variable name="newNodeName" select="concat(local-name(), position())" />
<xsl:element name="{$newNodeName}">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
输出
<smartdocuments_root_node xmlns="http://com.logica.digimeente.zaaksysteem">
<Zaak>
<ZaakNummer>21773</ZaakNummer>
<ZaakID>21768</ZaakID>
<Titel>Melding klein evenement De grote Kompanjie Barbeque!</Titel>
<Kenmerken>
<Kenmerk1>
<KenmerkType>Starttijd evemenent</KenmerkType>
<Omschrijving>Starttijdevemenent</Omschrijving>
<Waarde>15:00</Waarde>
</Kenmerk1>
<Kenmerk2>
<KenmerkType>evement namens</KenmerkType>
<Omschrijving>evement namens</Omschrijving>
<Waarde>De Kompanjie</Waarde>
</Kenmerk2>
<Kenmerk3>
<KenmerkType>Datum evenement</KenmerkType>
<Omschrijving>Datumevenement</Omschrijving>
<Waarde>20171101</Waarde>
</Kenmerk3>
</Kenmerken>
</Zaak>
</smartdocuments_root_node>