作为 xsl 元素名称的 xsl 值
xsl value of as xsl element name
我有以下结构
<Rowsets>
<Rowset>
<Row>
<ID>123</ID>
<PropertyID>property 1</PropertyID>
<PropertyValue>value 1</PropertyValue>
</Row>
<Row>
<ID>123</ID>
<PropertyID>property 2</PropertyID>
<PropertyValue>value 2</PropertyValue>
</Row>
<Row>
<ID>456</ID>
<PropertyID>property 1</PropertyID>
<PropertyValue>value 11</PropertyValue>
</Row>
<Row>
<ID>456</ID>
<PropertyID>property 2</PropertyID>
<PropertyValue>value 22</PropertyValue>
</Row>
</Rowset>
我想将属性和ID一起分组,如下结构
<SEGMENTS>
<SET>
<ID>123</ID>
<property 1>value 1</property 1>
<property 2>value 2</property 2>
</SET>
<SET>
<ID>456</ID>
<property 1>value 11</property 1>
<property 2>value 22</property 2>
</SET>
我用这个 XSLT 表单来做这个
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="ID-sets" match="Row" use="ID" />
<xsl:template match="Rowsets/Rowset">
<SEGMENTS>
<xsl:for-each select="Row[count(. | key('ID-sets', ID)[1]) = 1]">
<xsl:sort select="ID" />
<SET>
<ID>
<xsl:value-of select="ID" />
</ID>
<xsl:for-each select="key('ID-sets', ID)">
<xsl:sort select="PropertyID" />
<xsl:element name="PropertyID">
<xsl:value-of select="PropertyValue"/>
</xsl:element>
</xsl:for-each>
</SET>
</xsl:for-each>
</SEGMENTS>
</xsl:template>
我就快完成了,但唯一不起作用的是元素名称。
经过一番研究,我发现我需要使用这个:
xsl:element 名称="{PropertyID}"
除此之外,它不起作用。 Notepad++ 发出无法对当前源应用转换的警告。
没有 {} 标签它可以工作,但它只是静态的而不是变量 PropertyID。
大概是个小东西,但是找不到了。
如果重要的话,我仅限于 xslt 1.0。
元素名称中不允许有空格。
另一种选择是
<Property id="{PropertyID}">
感谢 Tim C 的回答。
我有以下结构
<Rowsets>
<Rowset>
<Row>
<ID>123</ID>
<PropertyID>property 1</PropertyID>
<PropertyValue>value 1</PropertyValue>
</Row>
<Row>
<ID>123</ID>
<PropertyID>property 2</PropertyID>
<PropertyValue>value 2</PropertyValue>
</Row>
<Row>
<ID>456</ID>
<PropertyID>property 1</PropertyID>
<PropertyValue>value 11</PropertyValue>
</Row>
<Row>
<ID>456</ID>
<PropertyID>property 2</PropertyID>
<PropertyValue>value 22</PropertyValue>
</Row>
</Rowset>
我想将属性和ID一起分组,如下结构
<SEGMENTS>
<SET>
<ID>123</ID>
<property 1>value 1</property 1>
<property 2>value 2</property 2>
</SET>
<SET>
<ID>456</ID>
<property 1>value 11</property 1>
<property 2>value 22</property 2>
</SET>
我用这个 XSLT 表单来做这个
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="ID-sets" match="Row" use="ID" />
<xsl:template match="Rowsets/Rowset">
<SEGMENTS>
<xsl:for-each select="Row[count(. | key('ID-sets', ID)[1]) = 1]">
<xsl:sort select="ID" />
<SET>
<ID>
<xsl:value-of select="ID" />
</ID>
<xsl:for-each select="key('ID-sets', ID)">
<xsl:sort select="PropertyID" />
<xsl:element name="PropertyID">
<xsl:value-of select="PropertyValue"/>
</xsl:element>
</xsl:for-each>
</SET>
</xsl:for-each>
</SEGMENTS>
</xsl:template>
我就快完成了,但唯一不起作用的是元素名称。 经过一番研究,我发现我需要使用这个: xsl:element 名称="{PropertyID}"
除此之外,它不起作用。 Notepad++ 发出无法对当前源应用转换的警告。 没有 {} 标签它可以工作,但它只是静态的而不是变量 PropertyID。
大概是个小东西,但是找不到了。 如果重要的话,我仅限于 xslt 1.0。
元素名称中不允许有空格。 另一种选择是
<Property id="{PropertyID}">
感谢 Tim C 的回答。