我需要访问当前标记下方存在多个图层的标记的属性。
例如: 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但是它失败了并且没有返回任何东西,我做错了什么?
干杯
答案 0 :(得分:2)
所以基本上你想要遍历所有<Content>
个没有<AlternateID>
元素和idType="SeriesId"
元素的元素。
您可以直接在xsl:for-each
中执行此操作:
<xsl:for-each select="ns0:BxfMessage/ns0:BxfData/ns0:Content[descendant::ns0:AlternateID/@idType != 'SeriesId']">
答案 1 :(得分:1)
函数string()
返回一个字符串,但你想要的是一个布尔值。像test=//AlternateId[contains(@idType, 'SeriesId')]
这样的东西应该会更好。