2016-10-18 2 views
0

У меня есть XML:Как изменить значение XML с помощью XSL

<?xml version="1.0" encoding="UTF-8"?> 
<COLLECTION> 
<AddedParts NAME="AddedParts" TYPE="Unknown" STATUS="0"> 
<Part> 
<ProcurementType>make</ProcurementType> 
<CountryOfOrigin/> 
</Part> 
</AddedParts> 

<ChangedParts NAME="ChangedParts" TYPE="Unknown" STATUS="0"> 
<Part> 
<ProcurementType>make</ProcurementType> 
<CountryOfOrigin/> 
</Part> 
<Part> 
<ProcurementType>buy</ProcurementType> 
<CountryOfOrigin/> 
</Part> 
</ChangedParts> 
<DeletedParts NAME="DeletedParts" TYPE="Unknown" STATUS="0"> 
<Part> 
<ProcurementType>singlesource</ProcurementType> 
<CountryOfOrigin/> 
</Part> 
<Part> 
<ProcurementType>make</ProcurementType> 
<CountryOfOrigin/> 
</Part> 
</DeletedParts> 

Я хочу изменить CountryOfOrigin и ProcurementType на основе ProcurementType. Преобразование требуется следующим Для ProcurementType

  • макияж ---> м
  • купить -----> P
  • singlesource -> P
  • с открытым исходным кодом -> Р

Для CountryOfOrigin Если ProcurementType является

  • марка - >> MX
  • купить -----> US
  • singlesource -> US
  • с открытым исходным кодом -> США

Для этого я применил.

<xsl:template match="CountryOfOrigin"> 
     <countryOfOrigin> 
      <xsl:choose> 
       <xsl:when test="../../Part/ProcurementType='make'">MX</xsl:when> 
       <xsl:when test="../../Part/ProcurementType='buy'">US</xsl:when> 
       <xsl:when test="../../Part/ProcurementType='singlesource'">US</xsl:when> 
       <xsl:when test="../../Part/ProcurementType='opensource'">US</xsl:when> 
      </xsl:choose> 
     </countryOfOrigin> 
    </xsl:template> 

    <xsl:template match="Part/ProcurementType"> 
     <procurementType> 
      <xsl:choose> 
       <xsl:when test="../../Part/ProcurementType='make'">M</xsl:when> 
       <xsl:when test="../../Part/ProcurementType='buy'">P</xsl:when> 
       <xsl:when test="../../Part/ProcurementType='singlesource'">P</xsl:when> 
       <xsl:when test="../../Part/ProcurementType='opensource'">P</xsl:when> 
      </xsl:choose> 
     </procurementType> 
    </xsl:template> 

Это не работает. Независимо от того, что бы я ни применял в XSL, он реплицируется для всего содержимого. Нужна помощь

ответ

1

Как насчет:

<xsl:template match="ProcurementType"> 
    <procurementType> 
     <xsl:choose> 
      <xsl:when test=".='make'">M</xsl:when> 
      <xsl:when test=".='buy'">P</xsl:when> 
      <xsl:when test=".='singlesource'">P</xsl:when> 
      <xsl:when test=".='opensource'">P</xsl:when> 
     </xsl:choose> 
    </procurementType> 
</xsl:template> 

<xsl:template match="CountryOfOrigin"> 
    <countryOfOrigin> 
     <xsl:choose> 
      <xsl:when test="../ProcurementType='make'">MX</xsl:when> 
      <xsl:when test="../ProcurementType='buy'">US</xsl:when> 
      <xsl:when test="../ProcurementType='singlesource'">US</xsl:when> 
      <xsl:when test="../ProcurementType='opensource'">US</xsl:when> 
     </xsl:choose> 
    </countryOfOrigin> 
</xsl:template> 

Или, если вы предпочитаете:

<xsl:template match="Part[ProcurementType='make']"> 
    <Part> 
     <ProcurementType>M</ProcurementType> 
     <CountryOfOrigin>MX</CountryOfOrigin> 
    </Part> 
</xsl:template> 

<xsl:template match="Part[ProcurementType='buy']"> 
    <Part> 
     <ProcurementType>P</ProcurementType> 
     <CountryOfOrigin>US</CountryOfOrigin> 
    </Part> 
</xsl:template> 

<xsl:template match="Part[ProcurementType='singlesource' or ProcurementType='opensource']"> 
    <Part> 
     <ProcurementType>P</ProcurementType> 
     <CountryOfOrigin>US</CountryOfOrigin> 
    </Part> 
</xsl:template> 
+0

Спасибо большое он работал для меня. –

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