if语句没有标识xml数据中所需的项

  • 本文关键字:数据 xml 语句 标识 if xml xslt
  • 更新时间 :
  • 英文 :


我是XSL的新手,所以请原谅我的无知。我正试图构建一个表,仅从资源池中提取某些元素-那些标记为"TeamMember"的元素。我认为我有问题,要么是xsl:if语法,要么是我引用XML数据的方式。

XSL代码是-
<xsl:for-each select="miradi:Resource/miradi:ResourceRoleCodesContainer/..">
<xsl:if test="miradi:Resource/miradi:ResourceRoleCodesContainer/miradi:code = TeamMember">
<xsl:value-of select="miradi:ResourceSurname"/>

XML数据是-

<miradi:ResourcePool><miradi:Resource Id="2530">
<miradi:ResourceResourceType>Person</miradi:ResourceResourceType>
<miradi:ResourceIdentifier>DA</miradi:ResourceIdentifier>
<miradi:ResourceSurname>Andrews</miradi:ResourceSurname>
<miradi:ResourcePosition>Manager</miradi:ResourcePosition>
<miradi:ResourceRoleCodesContainer><miradi:code>TeamMember</miradi:code </miradi:ResourceRoleCodesContainer>
</miradi:Resource>

当我删除xsl:if语句时,代码正确地构建了一个表,显示每个资源的一行;但是我只想为每个标记为"TeamMember"的资源显示一行。当我包含XSL:if语句时,表中没有任何行。

任何帮助都将非常感激。由于

你的代码有几个问题:

首先,完成后:

<xsl:for-each select="miradi:Resource/miradi:ResourceRoleCodesContainer/..">

您(可能)处于miradi:Resource的上下文中。我说"可能"是因为你没有给我们展示起始上下文。下到miradi:ResourceRoleCodesContainer,然后返回到父miradi:Resource,这也没有什么意义,但这是另一个问题。

在此上下文中,您在xsl:if测试中使用的表达式:

miradi:Resource/miradi:ResourceRoleCodesContainer/miradi:code

不选择任何内容,因为miradi:Resource不是上下文节点的子节点。

另一个问题是,您的条件针对不存在的节点进行测试,而不是针对字面值字符串。你的测试应该是:

<xsl:if test="miradi:ResourceRoleCodesContainer/miradi:code = 'TeamMember'">

或者你可以简单地写:

<xsl:for-each select="miradi:Resource[miradi:ResourceRoleCodesContainer/miradi:code = 'TeamMember']">
    <xsl:value-of select="miradi:ResourceSurname"/>
</xsl:for-each>

最新更新