2016-08-27 14 views
1

私のxsltを修正する上であなたの助けが必要です。xslt:子要素の値に基づいてノードを削除します

私の要件は、その死亡者(孫)値に基づいて特定の子ノードを削除することです。

例の下に、私は私に被相続人 "SID" 値 "1113181" と等しくない

入力XML含むXML与えXSLT記述する必要がで:

<CDM CDMVersion="1.3" FType="Transactional" FOID="85b40b86-e6f1-4813-a5f4-0b98c90bd72d" CreationDateTime="2016-08-19T19:04:25" xmlns="http://www.example.com/ns/CDM/v1.3" xmlns:xyz="http://www.example.com/ns/CDM/MData"> 
    <TestData EduOID="LX4211-204" MDataVersionOID="34" xyz:AuditSubCategoryName="Verify"> 
     <SubData SubKey="5117f771-790f-4cde-b261-1a2db0dcd04b" xyz:SubKeyType="SubUUID" xyz:SubName="204-0114-002"> 
     <SRef LocOID="LX4211204_0114"/> 
     <SubEventData EduEventOID="EOT" EduEventRepeatKey="EOT[1]" xyz:InstanceId="76194"> 
      <FmData FmOID="VS2" FmRepeatKey="1" xyz:DataPageId="388465"> 
       <IGroupData IGroupOID="VS2" xyz:RecordId="1044557"> 
        <IData ItemOID="VS2.VSORRES4_2" TransactionType="Upsert" xyz:Verify="Yes"> 
        <Record> 
         <TesterRef TesterOID="bballardamad1"/> 
         <LocRef LocOID="LX4211204_0114"/> 
         <DateTimeStamp>2016-08-16T17:07:15</DateTimeStamp> 
         <ReasonForChange/> 
         <SID>1113181</SID> 
        </Record> 
        </IData> 
       </IGroupData> 
      </FmData> 
     </SubEventData> 
     </SubData> 
    </TestData> 
    <TestData EduOID="LX4211-204" MDataVersionOID="34" xyz:AuditSubCategoryName="QueryClose"> 
     <SubData SubKey="5117f771-790f-4cde-b261-1a2db0dcd04b" xyz:SubKeyType="SubUUID" xyz:SubName="204-0114-002"> 
     <SRef LocOID="LX4211204_0114"/> 
     <SubEventData EduEventOID="EOT" EduEventRepeatKey="EOT[1]" xyz:InstanceId="76194"> 
      <FmData FmOID="VS2" FmRepeatKey="1" xyz:DataPageId="388465"> 
       <IGroupData IGroupOID="VS2" xyz:RecordId="1044557"> 
        <IData ItemOID="VS2.VSORRES4_2" TransactionType="Upsert"> 
        <Record> 
         <TesterRef TesterOID="bballardamad1"/> 
         <LocRef LocOID="LX4211204_0114"/> 
         <DateTimeStamp>2016-08-16T17:07:15</DateTimeStamp> 
         <ReasonForChange/> 
         <SID>1113182</SID> 
        </Record> 
        <xyz:Query QueryRepeatKey="552326" Status="Closed" Recipient="Site from CRA"/> 
        </IData> 
       </IGroupData> 
      </FmData> 
     </SubEventData> 
     </SubData> 
    </TestData> 
    <TestData EduOID="LX4211-204" MDataVersionOID="34" xyz:AuditSubCategoryName="Verify"> 
     <SubData SubKey="5117f771-790f-4cde-b261-1a2db0dcd04b" xyz:SubKeyType="SubUUID" xyz:SubName="204-0114-002"> 
     <SRef LocOID="LX4211204_0114"/> 
     <SubEventData EduEventOID="WK1_POST" EduEventRepeatKey="WK1_POST[1]" xyz:InstanceId="119171"> 
      <FmData FmOID="VS2" FmRepeatKey="1" xyz:DataPageId="670872"> 
       <IGroupData IGroupOID="VS2" xyz:RecordId="1934354"> 
        <IData ItemOID="VS2.VSORRES12" TransactionType="Upsert" xyz:Verify="Yes"> 
        <Record> 
         <TesterRef TesterOID="bballardamad1"/> 
         <LocRef LocOID="LX4211204_0114"/> 
         <DateTimeStamp>2016-08-16T17:09:10</DateTimeStamp> 
         <ReasonForChange/> 
         <SID>1114610</SID> 
        </Record> 
        </IData> 
       </IGroupData> 
      </FmData> 
     </SubEventData> 
     </SubData> 
    </TestData> 
</CDM> 

===を========================================== ===========================

マイXSLT:


<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="node()|@*"> 
     <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

<!--<xsl:template match="//SID[text()!=1113181]"/>--> 
<xsl:template match="/CDM/TestData/SubData/SubEventData/FmData/IGroupData/IData/Record/SID[text()!=68943181]"/> 
</xsl:stylesheet> 

予想される出力:

<CDM CDMVersion="1.3" FType="Transactional" FOID="85b40b86-e6f1-4813-a5f4-0b98c90bd72d" CreationDateTime="2016-08-19T19:04:25" xmlns="http://www.example.com/ns/CDM/v1.3" xmlns:xyz="http://www.example.com/ns/CDM/MData"> 
    <TestData EduOID="LX4211-204" MDataVersionOID="34" xyz:AuditSubCategoryName="QueryClose"> 
     <SubData SubKey="5117f771-790f-4cde-b261-1a2db0dcd04b" xyz:SubKeyType="SubUUID" xyz:SubName="204-0114-002"> 
     <SRef LocOID="LX4211204_0114"/> 
     <SubEventData EduEventOID="EOT" EduEventRepeatKey="EOT[1]" xyz:InstanceId="76194"> 
      <FmData FmOID="VS2" FmRepeatKey="1" xyz:DataPageId="388465"> 
       <IGroupData IGroupOID="VS2" xyz:RecordId="1044557"> 
        <IData ItemOID="VS2.VSORRES4_2" TransactionType="Upsert"> 
        <Record> 
         <TesterRef TesterOID="bballardamad1"/> 
         <LocRef LocOID="LX4211204_0114"/> 
         <DateTimeStamp>2016-08-16T17:07:15</DateTimeStamp> 
         <ReasonForChange/> 
         <SID>1113182</SID> 
        </Record> 
        <xyz:Query QueryRepeatKey="552326" Status="Closed" Recipient="Site from CRA"/> 
        </IData> 
       </IGroupData> 
      </FmData> 
     </SubEventData> 
     </SubData> 
    </TestData> 
    <TestData EduOID="LX4211-204" MDataVersionOID="34" xyz:AuditSubCategoryName="Verify"> 
     <SubData SubKey="5117f771-790f-4cde-b261-1a2db0dcd04b" xyz:SubKeyType="SubUUID" xyz:SubName="204-0114-002"> 
     <SRef LocOID="LX4211204_0114"/> 
     <SubEventData EduEventOID="WK1_POST" EduEventRepeatKey="WK1_POST[1]" xyz:InstanceId="119171"> 
      <FmData FmOID="VS2" FmRepeatKey="1" xyz:DataPageId="670872"> 
       <IGroupData IGroupOID="VS2" xyz:RecordId="1934354"> 
        <IData ItemOID="VS2.VSORRES12" TransactionType="Upsert" xyz:Verify="Yes"> 
        <Record> 
         <TesterRef TesterOID="bballardamad1"/> 
         <LocRef LocOID="LX4211204_0114"/> 
         <DateTimeStamp>2016-08-16T17:09:10</DateTimeStamp> 
         <ReasonForChange/> 
         <SID>1114610</SID> 
        </Record> 
        </IData> 
       </IGroupData> 
      </FmData> 
     </SubEventData> 
     </SubData> 
    </TestData> 
</CDM> 

答えて

2

あなたの試みがうまくいかない理由4つの理由があります:あなたがしたい場合

  1. テンプレートがTestDataを削除するには、一致するようにするTestData - その子孫ではない。
  2. 入力XMLの要素は名前空間にあります。接頭辞を宣言し、一致/選択するときに接頭辞を使用する必要があります。あなたが保つにしたい場合は
  3. <TestData>その子孫SIDが等しい1113181、その後、あなたのテンプレートマッチを削除することはありませんTestDataその子孫SID等しい1113181
  4. 689431811113181ではありません。

試してみてください。あなたの時間と迅速な対応のためのマイケル

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:cdm="http://www.example.com/ns/CDM/v1.3"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="cdm:TestData[cdm:SubData/cdm:SubEventData/cdm:FmData/cdm:IGroupData/cdm:IData/cdm:Record/cdm:SID=1113181]"/> 

</xsl:stylesheet> 
+0

どうもありがとう...あなたの時間と迅速な対応のためのマイケル – Abe

+0

どうもありがとう...私残念ながら、他のシステムによって生成されるので、私は入力XMLに名前空間を追加する特権を持っていません。私は Abe

+0

"*入力XMLに名前空間を追加する*"とは思われません。提案されたXSLTはあなたのためには機能しませんか? –

関連する問題