1

次の XMLSectionLabelsでそれぞれの固有値を抽出するにはどうすればよいですか。FormDef

<XML>
<FormDef OID="F_TEST_1" Name="Test Form 1">
    <ItemGroupRef ItemGroupOID="TEST_GROUP_1" />
    <ItemGroupRef ItemGroupOID="TEST_GROUP_4" />
</FormDef>
<FormDef OID="F_TEST_2" Name="Test Form 2">
    <ItemGroupRef ItemGroupOID="TEST_GROUP_2" />
</FormDef>
<FormDef OID="F_TEST_3" Name="Test Form 3">
    <ItemGroupRef ItemGroupOID="TEST_GROUP_2"/>
    <ItemGroupRef ItemGroupOID="TEST_GROUP_3"/>
</FormDef>
<FormDef OID="F_TEST_4" Name="Test Form 4">
    <ItemGroupRef ItemGroupOID="TEST_GROUP_4"/>
</FormDef>

<ItemGroupDef OID="TEST_GROUP_1" Name="Ungrouped">
    <ItemRef ItemOID="I_MSA1_INIT" />
    <ItemRef ItemOID="I_MSA1_FORMD" />
    <ItemRef ItemOID="I_MSA1_MSA1_CONS" />
    <ItemRef ItemOID="I_MSA1_MSA1_PGT" />
</ItemGroupDef>
<ItemGroupDef OID="TEST_GROUP_2" Name="MSA1_complyreasG" >
    <ItemRef ItemOID="I_MSA1_MSA1_NOELIGREAS" />
    <ItemRef ItemOID="I_MSA1_MSA1_COMPLYREAS" />
</ItemGroupDef>
<ItemGroupDef OID="TEST_GROUP_3" Name="Ungrouped">
    <ItemRef ItemOID="I_MSA2_INIT" />
    <ItemRef ItemOID="I_MSA2_FROMD" />
    <ItemRef ItemOID="I_MSA2_IDV" />
    <ItemRef ItemOID="I_MSA2_MSA2_INITBF" />
</ItemGroupDef>
<ItemGroupDef OID="TEST_GROUP_4" Name="MSA2_POARTprecG">
    <ItemRef ItemOID="I_MSA2_MSA2_POARTPREC" />
    <ItemRef ItemOID="I_MSA2_MSA2_POARTNBV" />
    <ItemRef ItemOID="I_MSA2_MSA2_LOARTPREC" />
</ItemGroupDef>

<ItemDef OID="I_MSA1_INIT">
    <ItemDetails ItemOID="I_MSA1_INIT">
        <ItemPresentInForm FormOID="F_TEST_1">
            <SectionLabel>Section1</SectionLabel>
        </ItemPresentInForm>
    </ItemDetails>
</ItemDef>
<ItemDef OID="I_MSA1_FORMD">
    <ItemDetails ItemOID="I_MSA1_FORMD">
        <ItemPresentInForm FormOID="F_TEST_1">
            <SectionLabel>Section2</SectionLabel>
        </ItemPresentInForm>
    </ItemDetails>
</ItemDef>
<ItemDef OID="I_MSA1_MSA1_CONS">
    <ItemDetails ItemOID="I_MSA1_MSA1_CONS">
        <ItemPresentInForm FormOID="F_TEST_1">
            <SectionLabel>Section3</SectionLabel>
        </ItemPresentInForm>
    </ItemDetails>
</ItemDef>
<ItemDef OID="I_MSA1_MSA1_NOELIGREAS">
    <ItemDetails ItemOID="I_MSA1_MSA1_NOELIGREAS">
        <ItemPresentInForm FormOID="F_TEST_2">
            <SectionLabel>Section1</SectionLabel>
        </ItemPresentInForm>
        <ItemPresentInForm FormOID="F_TEST_3">
            <SectionLabel>Section1</SectionLabel>
        </ItemPresentInForm>
    </ItemDetails>
</ItemDef>
<ItemDef OID="I_MSA1_MSA1_COMPLYREAS">
    <ItemDetails ItemOID="I_MSA1_MSA1_COMPLYREAS">
        <ItemPresentInForm FormOID="F_TEST_2">
            <SectionLabel>Section2</SectionLabel>
        </ItemPresentInForm>
        <ItemPresentInForm FormOID="F_TEST_3">
            <SectionLabel>Section2</SectionLabel>
        </ItemPresentInForm>
    </ItemDetails>
</ItemDef>
<ItemDef OID="I_MSA2_INIT">
    <ItemDetails ItemOID="I_MSA2_INIT">
        <ItemPresentInForm FormOID="F_TEST_3">
            <SectionLabel>Section1</SectionLabel>
        </ItemPresentInForm>
    </ItemDetails>
</ItemDef>
<ItemDef OID="I_MSA2_FROMD">
    <ItemDetails ItemOID="I_MSA2_FROMD">
        <ItemPresentInForm FormOID="F_TEST_3">
            <SectionLabel>Section2</SectionLabel>
        </ItemPresentInForm>
    </ItemDetails>
</ItemDef>
<ItemDef OID="I_MSA2_IDV">
    <ItemDetails ItemOID="I_MSA2_IDV">
        <ItemPresentInForm FormOID="F_TEST_3">
            <SectionLabel>Section3</SectionLabel>
        </ItemPresentInForm>
    </ItemDetails>
</ItemDef>
<ItemDef OID="I_MSA2_MSA2_POARTPREC">
    <ItemDetails ItemOID="I_MSA2_MSA2_POARTPREC">
        <ItemPresentInForm FormOID="F_TEST_1">
            <SectionLabel>Section1</SectionLabel>
        </ItemPresentInForm>
        <ItemPresentInForm FormOID="F_TEST_4">
            <SectionLabel>Section1</SectionLabel>
        </ItemPresentInForm>
    </ItemDetails>
</ItemDef>
<ItemDef OID="I_MSA2_MSA2_POARTNBV">
    <ItemDetails ItemOID="I_MSA2_MSA2_POARTNBV">
        <ItemPresentInForm FormOID="F_TEST_1">
            <SectionLabel>Section2</SectionLabel>
        </ItemPresentInForm>
        <ItemPresentInForm FormOID="F_TEST_4">
            <SectionLabel>Section2</SectionLabel>
        </ItemPresentInForm>
    </ItemDetails>
</ItemDef>
<ItemDef OID="I_MSA2_MSA2_LOARTPREC">
    <ItemDetails ItemOID="I_MSA2_MSA2_LOARTPREC">
        <ItemPresentInForm FormOID="F_TEST_1">
            <SectionLabel>Section3</SectionLabel>
        </ItemPresentInForm>
        <ItemPresentInForm FormOID="F_TEST_4">
            <SectionLabel>Section3</SectionLabel>
        </ItemPresentInForm>
    </ItemDetails>
</ItemDef>
</XML>

まず、キーを定義します。

<xsl:key name="labels" match="ItemDef/ItemDetails/ItemPresentInForm" use="@FormOID" />

次に、次のように選択して使用します。

<xsl:variable name="sections" 
                select="//*[local-name()='ItemDef']/*[local-name()='ItemDetails']/*[local-name()='ItemPresentInForm']
                           [generate-id() = generate-id(key('labels', @FormOID))]">

                <xsl:value-of select="./SectionLabel" />

            </xsl:variable>

しかし、これは次を返します:

セクション
1 セクション
1 セクション1
セクション1

のキーをピッチに変更するSectionLabel:

<xsl:key name="labels" match="ItemDef/ItemDetails/ItemPresentInForm" use="SectionLabel" />

変換する XSLT:

                <xsl:variable name="sections" 
                select="//*[local-name()='ItemDef']/*[local-name()='ItemDetails']/*[local-name()='ItemPresentInForm']
                           [generate-id(.) = generate-id(key('labels', SectionLabel))]">

                <xsl:value-of select="./SectionLabel" />

            </xsl:variable>

これを返します:

セクション1
セクション2
セクション3
セクション
4
セクション1
セクション2 セクション3
セクション4 セクション1 セクション2 セクション3 セクション
4
セクション1 セクション2 セクション 3 セクション 4






各 FormDef を繰り返し処理しているときに、ドキュメント内のすべてのセクション ラベルです。現在の FormDef のセクション ラベルのみが抽出された出力を取得することを目指しています。

予想される出力は次のようになります。

Form OID="F_TEST_1"
Labels: Section1, Section2, Section3 

Form OID="F_TEST_2"
Labels: Section1, Section2 

Form OID="F_TEST_3"
Labels: Section1, Section2, Section3 

Form OID="F_TEST_4"
Labels: Section1, Section2, Section3 

ありがとう

4

1 に答える 1

0

この変換:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:key name="kLabelsInForm" match="SectionLabel"
  use="concat(../@FormOID, '+', .)"/>

 <xsl:template match="FormDef">
  Form OID="<xsl:value-of select="@OID"/>"
  Labels: <xsl:text/>

  <xsl:variable name="vOID" select="@OID"/>
  <xsl:for-each select=
  "../ItemDef/*/*/SectionLabel
      [generate-id()
      =
       generate-id(key('kLabelsInForm',
                        concat($vOID, '+', .)
                       )
                        [1]
                   )
      ]
  ">
    <xsl:value-of select="concat(., ' ')"/>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<XML>
    <FormDef OID="F_TEST_1" Name="Test Form 1">
        <ItemGroupRef ItemGroupOID="TEST_GROUP_1" />
        <ItemGroupRef ItemGroupOID="TEST_GROUP_4" />
    </FormDef>
    <FormDef OID="F_TEST_2" Name="Test Form 2">
        <ItemGroupRef ItemGroupOID="TEST_GROUP_2" />
    </FormDef>
    <FormDef OID="F_TEST_3" Name="Test Form 3">
        <ItemGroupRef ItemGroupOID="TEST_GROUP_2"/>
        <ItemGroupRef ItemGroupOID="TEST_GROUP_3"/>
    </FormDef>
    <FormDef OID="F_TEST_4" Name="Test Form 4">
        <ItemGroupRef ItemGroupOID="TEST_GROUP_4"/>
    </FormDef>
    <ItemGroupDef OID="TEST_GROUP_1" Name="Ungrouped">
        <ItemRef ItemOID="I_MSA1_INIT" />
        <ItemRef ItemOID="I_MSA1_FORMD" />
        <ItemRef ItemOID="I_MSA1_MSA1_CONS" />
        <ItemRef ItemOID="I_MSA1_MSA1_PGT" />
    </ItemGroupDef>
    <ItemGroupDef OID="TEST_GROUP_2" Name="MSA1_complyreasG" >
        <ItemRef ItemOID="I_MSA1_MSA1_NOELIGREAS" />
        <ItemRef ItemOID="I_MSA1_MSA1_COMPLYREAS" />
    </ItemGroupDef>
    <ItemGroupDef OID="TEST_GROUP_3" Name="Ungrouped">
        <ItemRef ItemOID="I_MSA2_INIT" />
        <ItemRef ItemOID="I_MSA2_FROMD" />
        <ItemRef ItemOID="I_MSA2_IDV" />
        <ItemRef ItemOID="I_MSA2_MSA2_INITBF" />
    </ItemGroupDef>
    <ItemGroupDef OID="TEST_GROUP_4" Name="MSA2_POARTprecG">
        <ItemRef ItemOID="I_MSA2_MSA2_POARTPREC" />
        <ItemRef ItemOID="I_MSA2_MSA2_POARTNBV" />
        <ItemRef ItemOID="I_MSA2_MSA2_LOARTPREC" />
    </ItemGroupDef>
    <ItemDef OID="I_MSA1_INIT">
        <ItemDetails ItemOID="I_MSA1_INIT">
            <ItemPresentInForm FormOID="F_TEST_1">
                <SectionLabel>Section1</SectionLabel>
            </ItemPresentInForm>
        </ItemDetails>
    </ItemDef>
    <ItemDef OID="I_MSA1_FORMD">
        <ItemDetails ItemOID="I_MSA1_FORMD">
            <ItemPresentInForm FormOID="F_TEST_1">
                <SectionLabel>Section2</SectionLabel>
            </ItemPresentInForm>
        </ItemDetails>
    </ItemDef>
    <ItemDef OID="I_MSA1_MSA1_CONS">
        <ItemDetails ItemOID="I_MSA1_MSA1_CONS">
            <ItemPresentInForm FormOID="F_TEST_1">
                <SectionLabel>Section3</SectionLabel>
            </ItemPresentInForm>
        </ItemDetails>
    </ItemDef>
    <ItemDef OID="I_MSA1_MSA1_NOELIGREAS">
        <ItemDetails ItemOID="I_MSA1_MSA1_NOELIGREAS">
            <ItemPresentInForm FormOID="F_TEST_2">
                <SectionLabel>Section1</SectionLabel>
            </ItemPresentInForm>
            <ItemPresentInForm FormOID="F_TEST_3">
                <SectionLabel>Section1</SectionLabel>
            </ItemPresentInForm>
        </ItemDetails>
    </ItemDef>
    <ItemDef OID="I_MSA1_MSA1_COMPLYREAS">
        <ItemDetails ItemOID="I_MSA1_MSA1_COMPLYREAS">
            <ItemPresentInForm FormOID="F_TEST_2">
                <SectionLabel>Section2</SectionLabel>
            </ItemPresentInForm>
            <ItemPresentInForm FormOID="F_TEST_3">
                <SectionLabel>Section2</SectionLabel>
            </ItemPresentInForm>
        </ItemDetails>
    </ItemDef>
    <ItemDef OID="I_MSA2_INIT">
        <ItemDetails ItemOID="I_MSA2_INIT">
            <ItemPresentInForm FormOID="F_TEST_3">
                <SectionLabel>Section1</SectionLabel>
            </ItemPresentInForm>
        </ItemDetails>
    </ItemDef>
    <ItemDef OID="I_MSA2_FROMD">
        <ItemDetails ItemOID="I_MSA2_FROMD">
            <ItemPresentInForm FormOID="F_TEST_3">
                <SectionLabel>Section2</SectionLabel>
            </ItemPresentInForm>
        </ItemDetails>
    </ItemDef>
    <ItemDef OID="I_MSA2_IDV">
        <ItemDetails ItemOID="I_MSA2_IDV">
            <ItemPresentInForm FormOID="F_TEST_3">
                <SectionLabel>Section3</SectionLabel>
            </ItemPresentInForm>
        </ItemDetails>
    </ItemDef>
    <ItemDef OID="I_MSA2_MSA2_POARTPREC">
        <ItemDetails ItemOID="I_MSA2_MSA2_POARTPREC">
            <ItemPresentInForm FormOID="F_TEST_1">
                <SectionLabel>Section1</SectionLabel>
            </ItemPresentInForm>
            <ItemPresentInForm FormOID="F_TEST_4">
                <SectionLabel>Section1</SectionLabel>
            </ItemPresentInForm>
        </ItemDetails>
    </ItemDef>
    <ItemDef OID="I_MSA2_MSA2_POARTNBV">
        <ItemDetails ItemOID="I_MSA2_MSA2_POARTNBV">
            <ItemPresentInForm FormOID="F_TEST_1">
                <SectionLabel>Section2</SectionLabel>
            </ItemPresentInForm>
            <ItemPresentInForm FormOID="F_TEST_4">
                <SectionLabel>Section2</SectionLabel>
            </ItemPresentInForm>
        </ItemDetails>
    </ItemDef>
    <ItemDef OID="I_MSA2_MSA2_LOARTPREC">
        <ItemDetails ItemOID="I_MSA2_MSA2_LOARTPREC">
            <ItemPresentInForm FormOID="F_TEST_1">
                <SectionLabel>Section3</SectionLabel>
            </ItemPresentInForm>
            <ItemPresentInForm FormOID="F_TEST_4">
                <SectionLabel>Section3</SectionLabel>
            </ItemPresentInForm>
        </ItemDetails>
    </ItemDef>
</XML>

必要な正しい結果(各フォームの一意のSectionLabel値) を生成します。

  Form OID="F_TEST_1"
  Labels: Section1 Section2 Section3 

  Form OID="F_TEST_2"
  Labels: Section1 Section2 

  Form OID="F_TEST_3"
  Labels: Section1 Section2 Section3 

  Form OID="F_TEST_4"
  Labels: Section1 Section2 Section3 

説明:

  • グループ化される要素が複合キーを使用して索引付けされる Muenchian グループ化方法。

  • フォーム内の一意の各セクション値は、文字列値とその親SectionLabelの属性の文字列値を連結することによって識別されます。FormOID

  • このように、SectionLabel異なる形式の同じ値は異なるキーを生成し、1 回だけカウントされません。

Muenchian グループ化に関するいくつかの優れたリソースを次に示します

于 2012-04-08T23:10:32.577 に答える