Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSLT转换xml,以便循环节点获得唯一的名称_Xml_Xslt_Transformation - Fatal编程技术网

使用XSLT转换xml,以便循环节点获得唯一的名称

使用XSLT转换xml,以便循环节点获得唯一的名称,xml,xslt,transformation,Xml,Xslt,Transformation,另外,这个例子是一个更大的xml的一部分,希望我澄清一下 我得到了xml文件的以下部分: <smartdocuments_root_node xmlns="http://com.logica.digimeente.zaaksysteem"> <Zaak> <ZaakNummer>21773</ZaakNummer> <ZaakID>21768</ZaakID> <Titel>Melding klein evene

另外,这个例子是一个更大的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>

21773
21768
融合klein grote Kompanjie烧烤晚会!
Starttijd evemenent
starttijdevement
15:00
除夕夜的名字
除夕夜的名字
德孔潘杰
基准平差
约会聚会
20171101
我想得到的是:

    <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>

21773
21768
融合klein grote Kompanjie烧烤晚会!
Starttijd evemenent
starttijdevement
15:00
除夕夜的名字
除夕夜的名字
德孔潘杰
基准平差
约会聚会
20171101
或者使用
中的值重命名Kenmerk节点


有人能帮我吗?

您可以从复制输入数据的
标识模板开始

<xsl:template match="node() | @*">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*" />
    </xsl:copy>
</xsl:template>
然后必须使用别名访问这些元素

<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>

21773
21768
融合klein grote Kompanjie烧烤晚会!
Starttijd evemenent
starttijdevement
15:00
除夕夜的名字
除夕夜的名字
德孔潘杰
基准平差
约会聚会
20171101

您确定要这样做吗?这种XML很难使用(即使您将其调整为良好的格式):没有人会感谢您将其转换为这种形式。非常感谢,我添加了一些信息,并且正在努力使其正常工作。非常感谢您的帮助。更新后的输入XML现在包含一个名称空间,需要由XSLT处理以识别元素。请参阅更新的答案以及处理名称空间的说明。
<xsl:template match="abc:Kenmerk">
<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>