Insira uma tag com um identificador exclusivo em um XML

0

Eu posso adicionar um novo nó com um valor fixo personalizado ao meu arquivo XML dessa maneira, com xmlstarlet :

xmlstarlet ed --subnode "/legge190/data/lotto" --type elem -n newsubnode \
-v "myvalue"

Mas como adicionar um identificador exclusivo?

Se eu tentar adicionar um identificador exclusivo usando generate-id(.)

xmlstarlet ed --subnode "/legge190/data/lotto" --type elem -n newsubnode \
-v "generate-id(.)"

Eu não tenho um valor id, mas a string generate-id(.) .

Obrigado

    
por aborruso 24.09.2017 / 17:42

1 resposta

0

Eu resolvi com um arquivo xsl como este:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="cig"> <lottoID><xsl:value-of select="generate-id(.)"/></lottoID> <!-- a linefeed --> <xsl:text>&#xa;</xsl:text> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>

O id é gerado pela função generate-id XPATH.

Dessa forma, copio todos os nós e insiro um identificador exclusivo no elemento <lottoID> logo antes do elemento <cig> (que é um elemento do meu arquivo XML de entrada ).

O comando com xmlstarlet é:

xmlstarlet tr stile.xsl input.xml
    
por 25.09.2017 / 09:40