一意の識別子を含むタグをXMLに挿入する

一意の識別子を含むタグをXMLに挿入する

これにより、カスタム固定値を持つ新しいノードをXMLファイルに追加できます。xmlstarlet:

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

しかし、一意の識別子をどのように追加しますか?

以下を使用して一意の識別子を追加しようとするとgenerate-id(.)

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

id値はありませんが、文字列generate-id(.)

ありがとう

答え1

私はxsl次のファイルで解決しました。

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

idXPATH関数によって生成されますgenerate-id

このようにしてすべてのノードをコピーし、要素の<lottoID>前に一意の識別子を挿入します<cig>(これは私の要素です)。XMLファイルの入力)。

このコマンドは次のとおりです。xmlstarlet 例:

xmlstarlet tr stile.xsl input.xml

関連情報