1

我需要访问在当前标签下存在几层的标签的属性。

例如:XML 的片段如下所示

<Content version="Title" action="add">
  <ProgramContent>
    <ContentMetaData>
      <ContentId>
        <HouseNumber>558960</HouseNumber>
        <AlternateId idType="SeriesId" authoritativeSource="BCM">19714</AlternateId>
        <AlternateId idType="EntityId" authoritativeSource="BCM">550133</AlternateId>
      </ContentId>
     </ContentMetaData>
   </ProgramContent>
</Content>

我的代码目前看起来像这样:

<xsl:for-each select="ns0:BxfMessage/ns0:BxfData/ns0:Content">
   <xsl:if test="string(@version)= 'Title'">
     <xsl:if test="string(//AlternateId[@idType ='SeriesId'])">
       <test>hey</test>
     </xsl:if>
   </xsl:if>
</xsl:for-each>

我需要在内容标签上执行一个 for-each 循环来检查所有这些,但是在那个 for-each 循环中,我只想在 AlternateID 标签的属性不包含 seriesId 时继续操作。因此,如果它们中的任何一个是 seriesId 我想结束 if 语句。我该怎么做呢?如您所见,我尝试了一个 if 语句,该语句应该检查属性 idType 是否等于 SeriesId 但它失败并且不返回任何内容,我做错了什么吗?

干杯

4

2 回答 2

2

所以基本上你想遍历所有<Content>没有<AlternateID>元素的元素idType="SeriesId"

您可以直接xsl:for-each这样做:

<xsl:for-each select="ns0:BxfMessage/ns0:BxfData/ns0:Content[descendant::ns0:AlternateID/@idType != 'SeriesId']">
于 2013-10-03T11:54:04.723 回答
1

该函数string()返回一个字符串,但您想要的是一个布尔值。类似的东西test=//AlternateId[contains(@idType, 'SeriesId')]应该工作得更好。

于 2013-10-03T12:48:39.043 回答