【问题标题】:xsl value of as xsl element name作为 xsl 元素名称的 xsl 值
【发布时间】:2017-07-06 12:42:43
【问题描述】:

我有以下结构

<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 name="{PropertyID}"

除了,它不起作用。 Notepad++ 给出了无法对当前源应用转换的警告。 如果没有 {} 标记,它可以工作,但它只是静态的,而不是变量 PropertyID。

这可能是一件小事,但我找不到。 如果这很重要,我仅限于 xslt 1.0。

【问题讨论】:

  • 元素名称中不允许有空格,因此Property 1 的名称在 XML 中无效。您必须去掉空格,例如给出&lt;Property1&gt;,或者用下划线之类的符号替换空格。
  • 我已经考虑过了,所以除了避免空格之外没有别的办法吗?然后,我将使用两个静态标签,用于属性名称和值。丑陋,但比重命名所有内容要少得多。谢谢!
  • 你可以做类似&lt;Property id="{PropertyID}"&gt; 的事情吗?
  • 这似乎是我能得到的最接近一个好的 XML 结构的地方。谢谢!

标签: xml xslt value-of


【解决方案1】:

元素名称中不允许有空格。 另一种选择是

<Property id="{PropertyID}">

感谢 Tim C 的回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2019-01-18
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多