Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
Xml 如何更改元素名称_Xml_Xslt - Fatal编程技术网

Xml 如何更改元素名称

Xml 如何更改元素名称,xml,xslt,Xml,Xslt,我有一个需求,但我需要使用XSLT。但是,我对XSLT并不熟悉。我找到了许多关于如何更改元素名称的解决方案,但我没有看到任何与我的要求类似的参考资料 要求:我需要更改元素名称 如果该值包含数字,则元素标记将变为 如果该值包含文本,则元素标记将变为 如果该值包含选项,则元素标记将变为 输出文件: <eCDFDeclarations xmlns:ecdf="http://www.ctie.etat.lu/2011/ecdf"> <FileReference>000000B

我有一个需求,但我需要使用XSLT。但是,我对XSLT并不熟悉。我找到了许多关于如何更改元素名称的解决方案,但我没有看到任何与我的要求类似的参考资料

要求:我需要更改元素名称

  • 如果该值包含数字,则元素标记将变为
  • 如果该值包含文本,则元素标记将变为
  • 如果该值包含选项,则元素标记将变为
输出文件:

<eCDFDeclarations xmlns:ecdf="http://www.ctie.etat.lu/2011/ecdf">
<FileReference>000000B00000000T00000000</FileReference>
<eCDFFileVersion>aaaa</eCDFFileVersion>
<Interface>a</Interface>
<Agent>
    <MatrNbr>001</MatrNbr>
    <RCSNbr>2436</RCSNbr>
    <VATNbr>LU1223434235</VATNbr>
</Agent>
<Declarations>
    <Declarer>
    <MatrNbr>001</MatrNbr>
    <RCSNbr>2436</RCSNbr>
    <VATNbr>LU1223434235</VATNbr>
        <Declaration language="FR" type="AB" model="DIDL">
            <Year>2000</Year>
            <Period>0</Period>
            <FormData>
                <FormDataElement id="233">1NUMERIC</FormDataElement>
                <FormDataElement id="234">1NUMERIC</FormDataElement>
                <FormDataElement id="235">31TEXT</FormDataElement>
                <FormDataElement id="236">12TEXT</FormDataElement>
                <FormDataElement id="012">5010,00NUMERIC</FormDataElement>
                <FormDataElement id="204">1CHOICE</FormDataElement>
                <FormDataElement id="205">0CHOICE</FormDataElement>
                <FormDataElement id="414">90,00NUMERIC</FormDataElement>
                <FormDataElement id="415">300,00NUMERIC</FormDataElement>
                <Table>
                    <Line num="2">
                        <FormDataElement id="01">01/01/2012NUMERIC</FormDataElement>
                        <FormDataElement id="02">31/12/2012NUMERIC</FormDataElement>
                        <FormDataElement id="03">EURTEXT</FormDataElement>
                        <FormDataElement id="639">54606,08TEXT</FormDataElement>
                        <FormDataElement id="640">0CHOICE</FormDataElement>
                    </Line>
                </Table>
            </FormData>
        </Declaration>
    </Declarer>
</Declarations>
<ecdf:eCDFDeclarations xmlns:ecdf="http://www.ctie.etat.lu/2011/ecdf">
<ecdf:FileReference>000000B00000000T00000000</ecdf:FileReference>
<ecdf:eCDFFileVersion>aaaa</ecdf:eCDFFileVersion>
<ecdf:Interface>a</ecdf:Interface>
<ecdf:Agent>
    <ecdf:MatrNbr>String</ecdf:MatrNbr>
    <ecdf:RCSNbr>String</ecdf:RCSNbr>
    <ecdf:VATNbr>String</ecdf:VATNbr>
</ecdf:Agent>
<ecdf:Declarations>
    <ecdf:Declarer>
        <ecdf:MatrNbr>String</ecdf:MatrNbr>
        <ecdf:RCSNbr>String</ecdf:RCSNbr>
        <ecdf:VATNbr>String</ecdf:VATNbr>
        <ecdf:Declaration language="FR" type="aaaaaaaaaaaaaaaaaaaa" model="aaaaaaaaaaaaaaaaaaaa">
            <ecdf:Year>2000</ecdf:Year>
            <ecdf:Period>0</ecdf:Period>
            <ecdf:FormData>
                <NumericField id="233">1</NumericField>
                <NumericField id="234">1</NumericField>
                <TextField id="235">31</TextField>
                <TextField id="236">12</TextField>
                <NumericField id="012">5010,00</NumericField>
                <Choice id="204">1</Choice>
                <Choice id="205">0</Choice>
                <NumericField id="414">90,00</NumericField>
                <NumericField id="415">300,00</NumericField>
                <ecdf:Table>
                    <ecdf:Line num="2">
                        <NumericField id="01">01/01/2012</NumericField>
                        <NumericField id="02">31/12/2012</NumericField>
                        <TextField id="03">EUR</TextField>
                        <TextField id="639">54606,08</TextField>
                        <Choice id="640">0</Choice>
                    </ecdf:Line>
                </ecdf:Table>
            </ecdf:FormData>
        </ecdf:Declaration>
    </ecdf:Declarer>
</ecdf:Declarations>

000000B000000000000000000000
aaaa
A.
001
2436
LU12234235
001
2436
LU12234235
2000
0
1数字
1数字
31文本
12文本
5010,00数字
1选择
0选择
9万个数字
30万数字
2012年1月1日数字
2012年12月31日数字
欧洲文本
5460608文本
0选择

预期输出:

<eCDFDeclarations xmlns:ecdf="http://www.ctie.etat.lu/2011/ecdf">
<FileReference>000000B00000000T00000000</FileReference>
<eCDFFileVersion>aaaa</eCDFFileVersion>
<Interface>a</Interface>
<Agent>
    <MatrNbr>001</MatrNbr>
    <RCSNbr>2436</RCSNbr>
    <VATNbr>LU1223434235</VATNbr>
</Agent>
<Declarations>
    <Declarer>
    <MatrNbr>001</MatrNbr>
    <RCSNbr>2436</RCSNbr>
    <VATNbr>LU1223434235</VATNbr>
        <Declaration language="FR" type="AB" model="DIDL">
            <Year>2000</Year>
            <Period>0</Period>
            <FormData>
                <FormDataElement id="233">1NUMERIC</FormDataElement>
                <FormDataElement id="234">1NUMERIC</FormDataElement>
                <FormDataElement id="235">31TEXT</FormDataElement>
                <FormDataElement id="236">12TEXT</FormDataElement>
                <FormDataElement id="012">5010,00NUMERIC</FormDataElement>
                <FormDataElement id="204">1CHOICE</FormDataElement>
                <FormDataElement id="205">0CHOICE</FormDataElement>
                <FormDataElement id="414">90,00NUMERIC</FormDataElement>
                <FormDataElement id="415">300,00NUMERIC</FormDataElement>
                <Table>
                    <Line num="2">
                        <FormDataElement id="01">01/01/2012NUMERIC</FormDataElement>
                        <FormDataElement id="02">31/12/2012NUMERIC</FormDataElement>
                        <FormDataElement id="03">EURTEXT</FormDataElement>
                        <FormDataElement id="639">54606,08TEXT</FormDataElement>
                        <FormDataElement id="640">0CHOICE</FormDataElement>
                    </Line>
                </Table>
            </FormData>
        </Declaration>
    </Declarer>
</Declarations>
<ecdf:eCDFDeclarations xmlns:ecdf="http://www.ctie.etat.lu/2011/ecdf">
<ecdf:FileReference>000000B00000000T00000000</ecdf:FileReference>
<ecdf:eCDFFileVersion>aaaa</ecdf:eCDFFileVersion>
<ecdf:Interface>a</ecdf:Interface>
<ecdf:Agent>
    <ecdf:MatrNbr>String</ecdf:MatrNbr>
    <ecdf:RCSNbr>String</ecdf:RCSNbr>
    <ecdf:VATNbr>String</ecdf:VATNbr>
</ecdf:Agent>
<ecdf:Declarations>
    <ecdf:Declarer>
        <ecdf:MatrNbr>String</ecdf:MatrNbr>
        <ecdf:RCSNbr>String</ecdf:RCSNbr>
        <ecdf:VATNbr>String</ecdf:VATNbr>
        <ecdf:Declaration language="FR" type="aaaaaaaaaaaaaaaaaaaa" model="aaaaaaaaaaaaaaaaaaaa">
            <ecdf:Year>2000</ecdf:Year>
            <ecdf:Period>0</ecdf:Period>
            <ecdf:FormData>
                <NumericField id="233">1</NumericField>
                <NumericField id="234">1</NumericField>
                <TextField id="235">31</TextField>
                <TextField id="236">12</TextField>
                <NumericField id="012">5010,00</NumericField>
                <Choice id="204">1</Choice>
                <Choice id="205">0</Choice>
                <NumericField id="414">90,00</NumericField>
                <NumericField id="415">300,00</NumericField>
                <ecdf:Table>
                    <ecdf:Line num="2">
                        <NumericField id="01">01/01/2012</NumericField>
                        <NumericField id="02">31/12/2012</NumericField>
                        <TextField id="03">EUR</TextField>
                        <TextField id="639">54606,08</TextField>
                        <Choice id="640">0</Choice>
                    </ecdf:Line>
                </ecdf:Table>
            </ecdf:FormData>
        </ecdf:Declaration>
    </ecdf:Declarer>
</ecdf:Declarations>

000000B000000000000000000000
aaaa
A.
一串
一串
一串
一串
一串
一串
2000
0
1.
1.
31
12
5010,00
1.
0
90,00
300,00
01/01/2012
31/12/2012
欧元
54606,08
0

提前谢谢。

试试这个:

<xsl:template match="FormDataElement">
<xsl:variable name="outputElementName">
  <xsl:choose>
    <xsl:when test="contains(., 'NUMERIC')">NumericField</xsl:when>
    <xsl:when test="contains(., 'TEXT')">TextField</xsl:when>
    <xsl:when test="contains(., 'CHOICE')">Choice</xsl:when>
    <xsl:otherwise><!-- Fail fast --></xsl:otherwise>
  </xsl:choose>
</xsl:variable>
<xsl:element name="{$outputElementName}">
  <xsl:copy-of select="@* | node()"/>
</xsl:element>
</xsl:template>

数值场
文本字段
选择
试试这个:

<xsl:template match="FormDataElement">
<xsl:variable name="outputElementName">
  <xsl:choose>
    <xsl:when test="contains(., 'NUMERIC')">NumericField</xsl:when>
    <xsl:when test="contains(., 'TEXT')">TextField</xsl:when>
    <xsl:when test="contains(., 'CHOICE')">Choice</xsl:when>
    <xsl:otherwise><!-- Fail fast --></xsl:otherwise>
  </xsl:choose>
</xsl:variable>
<xsl:element name="{$outputElementName}">
  <xsl:copy-of select="@* | node()"/>
</xsl:element>
</xsl:template>

数值场
文本字段
选择

使用
xsl:choose
定义变量
$name
。然后使用
xsl:element
创建名为$name的元素。使用
xsl:choose
定义变量
$name
。然后使用
xsl:element
创建名为$name的元素。