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 ステートメントを終了します。どうすればいいですか?ご覧のとおり、属性 idType が SeriesId と等しいかどうかを確認する if ステートメントを試しましたが、失敗して何も返されません。何か問題がありますか?

乾杯

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 に答える