【问题标题】:select parent of a tag with XSLT使用 XSLT 选择标记的父级
【发布时间】:2015-04-23 09:13:47
【问题描述】:

我想在 for-each 循环中选择 XMI 标记的父级。 这是我的输入:

<XMI xmi.version='1.2' xmlns:UML="org.omg.xmi.namespace.UML">
    <XMI.content>
        <UML:Model xmi.id='eee_1045467100313_135436_1' name='Data'>
            <UML:Namespace.ownedElement>
                <UML:Package xmi.id='_9_0_bc102e5_1427365805826_580042_23'
                    name='migration2'>

                <UML:Package xmi.id='_9_0_bc102e5_1427365805826_580042_22'
                    name='migration'>
                    <UML:Class xmi.id='_9_0_bc102e5_1427367042666_255023_151'
                        name='Employee'>
                        <UML:Classifier.feature>
                            <UML:Attribute xmi.id='_9_0_bc102e5_1427367052819_893122_168'
                                name='cin'>
                            </UML:Attribute>
                        </UML:Classifier.feature>
                    </UML:Class>
                    <UML:Class xmi.id='_9_0_bc102e5_1427367042666_255023_152'
                        name='Employee2'>
                        <UML:Classifier.feature>
                            <UML:Attribute xmi.id='_9_0_bc102e5_1427367052819_893122_169'
                                name='cin2'>
                            </UML:Attribute>
                        </UML:Classifier.feature>
                    </UML:Class>
                    <UML:Class xmi.id='_9_0_bc102e5_1427367042666_255023_153'
                        name='Employee3'>
                        <UML:Classifier.feature>
                            <UML:Attribute xmi.id='_9_0_bc102e5_1427367052819_893122_170'
                                name='cin3'>
                            </UML:Attribute>
                        </UML:Classifier.feature>
                    </UML:Class>

                </UML:Package>
              </UML:Package>
            </UML:Namespace.ownedElement>
        </UML:Model>
    </XMI.content>
</XMI>

所以要使用 XSLT 选择 UML:Package 我使用 for-each 循环的选择选项:

<xsl:for-each
                    select="XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Package">
                    <packagedElement>
                        <xsl:attribute name="xmi:type">uml:package</xsl:attribute>
                        <xsl:attribute name="xmi.id">
                        <xsl:value-of select='@xmi.id' />
                    </xsl:attribute>
                        <xsl:attribute name="name">
                        <xsl:value-of select='@name' />
                    </xsl:attribute>
</xsl:for-each>

有没有可能更换

select="XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Package"

PS:我试过 */UML:Package 和 ../UML:Package 但没有成功。 有什么帮助吗?

【问题讨论】:

  • 您要选择哪个UML:Package?其中有两个,您可能应该按名称选择它们。顺便说一句,由于您的标签,代码超出了窗口,这很烦人。
  • 我想在我的输入中选择每个 UML:Package 以便对其进行更改并保持输入文件的相同层次结构

标签: xml xslt xmi


【解决方案1】:

为了选择所有UML:Package元素,你可以简单地写

select="//UML:Package"

【讨论】:

  • @Iheb 很高兴您找到了答案,但这并不是“在 for-each 循环中选择 XMI 标记的父级。”。
【解决方案2】:

您的问题并不完全清楚。

我想在 for-each 循环中选择 XMI 标记的父级。

这部分很简单:只需使用parent::* 或简短的../*。但这仅在您已经处于某个具有父节点的节点的上下文中时才有效。所以你的问题:

有没有办法更换

select="XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Package"

在这种情况下毫无意义。

【讨论】:

  • 如何在 for-each 循环中使用parent::*
  • 用它做什么?请扩展您的问题并解释您到底想做什么。
  • 好的,在 for-each 循环中使用 parent::* 来选择父节点
  • @Iheb 我没时间玩这个游戏。选择一个节点本身不是目标;大概您正在尝试选择它以 do 使用它。请返回并编辑您的问题,使其包含预期结果。另见:stackoverflow.com/help/mcve
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
相关资源
最近更新 更多