4

xpath バージョン 2 関数を使用する xslt ドキュメントを使用しています。私は xslt 1.0 プロセッサを搭載した xalan 2.6 jar しか持っていません。これは変更できない制約です。xpath 2.0 関数を 1.0 に変換するツールがあれば助けてください。

<xsl:variable name="var1_ClinicalDocument" as="node()?" select="ns0:ClinicalDocument"/>
        <DSMessage>
            <DSPatient>
                <xsl:for-each 

    select="$var1_ClinicalDocument[fn:exists(ns0:id/@root)]">
                        <Source>
                            <xsl:sequence select="fn:string(ns0:id/@root)"/>
                        </Source>
                    </xsl:for-each>
                    <Demographics>
                        <xsl:for-each select="($var1_ClinicalDocument/ns0:recordTarget/ns0:patientRole/ns0:id)[fn:exists(@extension)]">
                            <externalID>
                                <xsl:sequence select="fn:string(@extension)"/>
                            </externalID>
                        </xsl:for-each>
                        <xsl:for-each select="($var1_ClinicalDocument/ns0:recordTarget/ns0:patientRole/ns0:patient/ns0:name/ns0:given/node())[fn:boolean(self::text())]">
                            <firstName>
                                <xsl:sequence select="fn:string(.)"/>
                            </firstName>
4

3 に答える 3

2

試してみますが、これはテストされていません:

<xsl:variable name="var1_ClinicalDocument" select="ns0:ClinicalDocument"/>
        <DSMessage>
            <DSPatient>
                <xsl:for-each 

    select="$var1_ClinicalDocument[ns0:id/@root]">
                        <Source>
                            <xsl:value-of select="ns0:id/@root"/>
                        </Source>
                    </xsl:for-each>
                    <Demographics>
                        <xsl:for-each select="($var1_ClinicalDocument/ns0:recordTarget/ns0:patientRole/ns0:id)[@extension]">
                            <externalID>
                                <xsl:value-of select="@extension"/>
                            </externalID>
                        </xsl:for-each>
                        <xsl:for-each select="($var1_ClinicalDocument/ns0:recordTarget/ns0:patientRole/ns0:patient/ns0:name/ns0:given/node())[self::text()]">
                            <firstName>
                                <xsl:value-of select="."/>
                            </firstName>

もちろん、XPath/XSLT 2.0 のようなものを使用している場合や、さらに作業が必要な場合や、Xalan 固有の拡張機能が必要な場合はfn:exists、基本的に , の使用をfn:string置き換えるfn:booleanことができます。tokenizefor-each-group

于 2013-05-21T16:47:22.040 に答える
1

これは悪くない翻訳であるべきです:

    <xsl:variable name="var1_ClinicalDocument" select="ns0:ClinicalDocument"/>
    <DSMessage>
      <DSPatient>
        <xsl:for-each select="$var1_ClinicalDocument[ns0:id/@root]">
          <Source>
            <xsl:value-of select="ns0:id/@root"/>
          </Source>
        </xsl:for-each>
        <Demographics>
          <xsl:for-each select=
            "($var1_ClinicalDocument/ns0:recordTarget
                     /ns0:patientRole/ns0:id)[@extension]">
            <externalID>
             <xsl:value-of select="concat(@extension, ' ')"/>
            </externalID>
          </xsl:for-each>
          <xsl:for-each select=
           "$var1_ClinicalDocument/ns0:recordTarget/ns0:patientRole
                                  /ns0:patient/ns0:name/ns0:given/text()">
            <firstName>
              <xsl:value-of select="."/>
            </firstName>
          </xsl:for-each>
        </Demographics>
       </DSPatient>
    </DSMessage>
于 2013-05-21T23:35:38.467 に答える