1

xml-node をコピーするときに、すべての属性をコピーして同じ値に設定するにはどうすればよいですか?

xml が与えられた場合:

<schedule>
    <owner>
        <name>
            <first>Eric</first>
        </name>
    </owner>
    <appointment>
        <when>
            <date month="03" day="15" year="2001"/>
        </when>
        <subject>Interview potential new hire</subject>
    </appointment>
</schedule>

変換後に取得したいもの:

    <schedule>
        <owner>
            <name>
                <first>?</first>
            </name>
        </owner>
        <appointment>
            <when>
                <date month="?" day="?" year="?"/>
            </when>
            <subject>?</subject>
        </appointment>
   </schedule>

それが私が管理したものです:

 <xsl:template match="*|@*">
        <xsl:copy>
                <xsl:if test="node() and not(*)">
                    <xsl:text>?</xsl:text>
                </xsl:if>
                <xsl:if test="not(node())">
                    <xsl:attribute name="???">?</xsl:attribute>
                </xsl:if>
                <xsl:apply-templates select="*|@*" />
            </xsl:copy>
        </xsl:template>

    </xsl:stylesheet>

これらは機能しません:

<xsl:attribute name="name(.)">?</xsl:attribute> 
<xsl:attribute name="@*">?</xsl:attribute>
<xsl:attribute name="*">?</xsl:attribute>
<xsl:attribute name=".">?</xsl:attribute>       

<xsl:if test="not(node())">
     <xsl:text>?</xsl:text>
</xsl:if>

<xsl:if test="not(node())">
     ?
</xsl:if>

属性名は常に静的な値を期待していますか? xslt に回避策はありますか?

4

1 に答える 1