2015-11-16 2 views
1

Ниже является XML У меня естьКак получить Parent_Asset здесь через XSLT?

<document> 
     <businessobjects>  
      <AssetID> 
       <Code>002515</Code> 
       <RelatedAsset> 
        <AssetID> 
         <Code>A000507</Code> 
        </AssetID> 
       </RelatedAsset> 
       <DependentAsset> 
        <AssetID> 
         <Code>002519</Code> 
        </AssetID> 
       </DependentAsset> 

      </AssetID> 
      <AssetID> 
       <Code>002516</Code> 
       <DependentAsset> 
        <AssetID> 
         <Code>002515</Code> 
         <RelatedAsset> 
          <AssetID> 
           <Code>A000507</Code> 
          </AssetID> 
         </RelatedAsset> 
         <DependentAsset> 
          <AssetID> 
           <Code>002519</Code> 
          </AssetID> 
         </DependentAsset> 
        </AssetID> 
       </DependentAsset> 
      </AssetID> 
      <AssetID> 
       <Code>002519</Code> 
      </AssetID> 
     </businessobjects> 
    </document> 

, и я хочу, чтобы это быть преобразованы в формат ниже

<?xml version="1.0" encoding="UTF-8"?> 
    <document> 
     <businessobjects> 
      <Assets> 
      <Code>002515</Code> 
      <Parent_Asset>****</Parent_Asset> 
      <Dependent_Asset>002519</Dependent_Asset> 
      <Related_Asset>A000507</Related_Asset> 
      </Assets> 
      <Assets> 
      <Code>002516</Code> 
      <Parent_Asset>*****</Parent_Asset> 
      <Dependent_Asset>002515</Dependent_Asset> 
      <Related_Asset/> 
      </Assets> 
      <Assets> 
      <Code>002519</Code> 
      <Parent_Asset>#####</Parent_Asset> 
      <Dependent_Asset/> 
      <Related_Asset/> 
      </Assets> 
     </businessobjects> 
    </document> 

я могу получить другие элементы для узла «Parent_Asset» за исключением. Для 002519 Parent_Asset должен быть 002515 и для 002515 Parent_Asset должен быть 002516

Ниже приведен XSLT, который я пробовал.

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/document"> 
     <document> 
      <businessobjects> 
     <xsl:for-each select="businessobjects/AssetID"> 
      <Assets> 
       <Code><xsl:value-of select="child::Code[1]"/></Code> 
       <Parent_Asset> 

       </Parent_Asset> 
       <Dependent_Asset><xsl:value-of select="DependentAsset/AssetID/Code"/></Dependent_Asset> 
       <Related_Asset><xsl:value-of select="RelatedAsset/AssetID/Code"/></Related_Asset> 
      </Assets> 
     </xsl:for-each> 

      </businessobjects> 
     </document> 
    </xsl:template> 


</xsl:stylesheet> 

Просьба помочь. Какой должна быть логика, чтобы получить без родителя Asset

ответ

1

Вы можете создать ключ, чтобы искать DependentAsset элементы по их коду

<xsl:key name="Dependent" match="businessobjects/AssetID/DependentAsset" 
     use="AssetID/Code" /> 

Затем вы можете вычислить значение Parent_Asset следующим образом:

<Parent_Asset> 
    <xsl:value-of select="key('Dependent', Code)/../Code" /> 
</Parent_Asset> 

Таким образом, ключ получает Dependent, который ссылается на текущий Code, и вы используете ../Code, чтобы получить код для содержания AssetID.

+0

Как получить коды родительских активов, если есть несколько родителей. – SSN

+0

Вероятно, лучше всего задать новый вопрос, пример нескольких активов родителей. Благодаря! –

Смежные вопросы