У меня есть xml как это:
<person name="foo" gender = "male" />
Я хочу преобразовать его к
<person id="foo" gender="male" />
Существует ли способ сделать то использование XSLT?
У меня будет много дочерних узлов лично
У меня будет больше атрибутов в человеке.
Это очень просто: используйте преобразование идентичности и создайте шаблон, который преобразует атрибут name
:
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@name">
<xsl:attribute name="id">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
Это оставит все в документе, кроме атрибутов name
, в точности как есть. Если вы хотите изменить только атрибут name
для элементов person
, добавьте более строгий XPath в атрибут match
шаблона, например человек / @ имя
.
Это должно сработать, не совсем уверен в {name ()}, но вы можете заменить это на "person"
> <xsl:template match="person">
> <xsl:element name="{name()}">
> <xsl:attribute name="id">
> <xsl:value-of select="@name"/>
> </xsl:attribute>
> <xsl:attribute name="gender">
> <xsl:value-of select="@gender"/>
> </xsl:attribute>
> </xsl:element>
> </xsl:template>