1

SQL xml を実行すると、次のスキーマが 4 つのプロジェクトを返します。

<xsd:element name="iati-activities" sql:relation="IATI.ACTIVITIES" sql:key-fields="BUSINESS_UNIT">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="iati-activity" sql:relation="IATI.PROJECT_METADATA" sql:relationship="ACTIVITIES_ACTIVITY">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="ProjectId" type="xsd:string" sql:field="PROJECT_ID" sql:key-fields="PROJECT_ID" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  <xsd:complexType>
</xsd:element>

私は手に入れたい:

<iati-activities>
  <iati-activity>
    <ProjectId>00072877</ProjectId>
  </iati-activity>
</iati-activities>

ただし、実行するとフィルタリングされません。私が使用する xpath-query は次のとおりです。

<root xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <sql:header sql:nullvalue="ISNULL">
    <sql:param name="ProjectId">00072877</sql:param>
  </sql:header>
  <sql:xpath-query mapping-schema="activity_schema.xsd">
    iati-activities[iati-activity/ProjectId=$ProjectId]
  </sql:xpath-query>
</root>

これは私が得るものです:

    <iati-activities>
      <iati-activity>
        <ProjectId>00072877</ProjectId>
      </iati-activity>
      <iati-activity>
        <ProjectId>00059626</ProjectId>
      </iati-activity>
      <iati-activity>
        <ProjectId>...</ProjectId>
      </iati-activity>
      <iati-activity>
        <ProjectId>...</ProjectId>
      </iati-activity>
    </iati-activities>

次のクエリを使用する場合:

<root xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <sql:header sql:nullvalue="ISNULL">
    <sql:param name="ProjectId">00072877</sql:param>
  </sql:header>
  <sql:xpath-query mapping-schema="activity_schema.xsd">
    iati-activities/iati-activity[ProjectId=$ProjectId]
  </sql:xpath-query>
</root>

iati-acitivties 要素なしで以下を取得します。

<iati-activity>
  <ProjectId>00072877</ProjectId>
</iati-activity>

私が間違っていることを知っている人はいますか?

4

1 に答える 1

1

私はそれが何であるかを知っています...私が使用していたxpathは要素を指しているだけで、その親を選択することで、フィルタリングされたものだけでなく、親ノードの下のツリー全体を取得します。

完全にエクスポートし、親要素を手動で定義する場所に xslt を適用する必要があります。

<xsl:template match="/">
  <iati-activities version="1.01" GENERATED_DATE="{$GENERATED_DATE}">
    <xsl:for-each select="/iati-activities/iati-activity[ProjectId=$ProjectId]">
      <xsl:copy-of select="." />
    </xsl:for-each>
  </iati-activities>
</xsl:template>
于 2011-10-03T06:50:11.583 に答える