我怎么能做出這樣的 XML:
<nameGroup index="1">
<name>SOME NAME</name>
<country>CN</country>
</nameGroup>
<nameGroup index="2">
<name>SOME OTHER NAME</name>
<country>IQ</country>
</nameGroup>
對于這樣的 XML,將元素名稱與屬性值連接起來:
<nameGroup><name1>SOME NAME</name1><country1>CN</country1></nameGroup>
<nameGroup><name2>SOME OTHER NAME</name2><country2>IQ</country2></nameGroup>
使用適當的 XSLT?
我嘗試過這樣的事情:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates select="*" />
</xsl:copy>
</xsl:template>
<xsl:template match="nameGroup/name">
<xsl:variable name="pos">
<xsl:number count="info"/>
</xsl:variable>
<xsl:element name="{local-name()}{$pos}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
但結果是這樣的:
<nameGroup>1
<name>SOME NAME</name>
<country>CN</country>
</nameGroup>
<nameGroup>2
<name>SOME OTHER NAME</name>
<country>IQ</country>
</nameGroup>
任何人都知道我怎樣才能獲得想要的結果?謝謝!
PS:我是這樣弄的(如果將來有人會搜索這個):(在 Michael Kay 先生的幫助下)
<?xml version='1.0' encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<xsl:element name="{local-name()}{../@index}">
<xsl:apply-templates select="* | node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
uj5u.com熱心網友回復:
我無法想象為什么有人會想要這樣做。我也看不出你為什么覺得困難。你只需要規則
<xsl:template match="namegroup/*">
<xsl:element name="{local-name()}{../@index}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/442389.html
