реализация xsl для файла xml - PullRequest
2 голосов
/ 15 марта 2012

необходимо преобразовать XML-файл с тегом (dynamicVariable), который имеет атрибут (имя). Этот XML-файл необходимо преобразовать с использованием xsl в тот же XML-файл, чтобы тег (dynamicVariable) имел одинаковую структуру вдольвместе с ним и его тегом-содержимым также должно быть значение атрибута.

необходимо преобразовать приведенный ниже XML-файл

   <Content>
     <alertHeader>
         <text xmlns="http://abc.com" xmlns:w="http://def.com"> Claim  
           <dynamicVariable name="Claim_Reference" />: More Information Needed
         </text>
         <contactUs>false</contactUs>
     </alertHeader>


     <body>
         <text> ATM/Debit Card Claim: 
         <strong><dynamicVariable name="Claim_Reference" /></strong>
         </text>
     </body>

         </Content>

в тот же формат, но тег с именем 'name'атрибут должен появиться в выходном xml-файле в следующем формате

      <dynamicVariable name="Claim_Reference" />Claim_Reference</dynamicVariable>

Может ли кто-нибудь предоставить необходимый xsl-файл при конвертации того же самого.Надеюсь, что это сделано с помощью

    <xsl:copy></xsl:copy>  or <xsl:copy-of /> tags .

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Все так просто :

<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="*[name() = 'dynamicVariable']">
      <xsl:copy>
        <xsl:copy-of select="@*"/>
        <xsl:value-of select="@name"/>
      </xsl:copy>
     </xsl:template>
</xsl:stylesheet>

Когда это преобразование применяется к предоставленному документу XML :

<Content>
    <alertHeader>
        <text xmlns="http://abc.com" xmlns:w="http://def.com"> Claim              
            <dynamicVariable name="Claim_Reference" />: More Information Needed          
        </text>
        <contactUs>false</contactUs>
    </alertHeader>
    <body>
        <text> ATM/Debit Card Claim:           
            <strong>
                <dynamicVariable name="Claim_Reference" />
            </strong>
        </text>
    </body>
</Content>

желаемый, правильный результат получается :

<Content>
   <alertHeader>
      <text xmlns="http://abc.com" xmlns:w="http://def.com"> Claim
            <dynamicVariable name="Claim_Reference">Claim_Reference</dynamicVariable>: More Information Needed
        </text>
      <contactUs>false</contactUs>
   </alertHeader>
   <body>
      <text> ATM/Debit Card Claim:
            <strong>
            <dynamicVariable name="Claim_Reference">Claim_Reference</dynamicVariable>
         </strong>
      </text>
   </body>
</Content>

Пояснение :

  1. Идентификатор Правило копирует каждый узел "как есть".

  2. Один шаблон переопределяет шаблон идентификации.Он соответствует любому с именем "dynamicVariable" независимо от пространства имен и является потомком strong (таким образом, указание большего контекста помогает нам обработать только этот случай dynamicVariable, но оставить предыдущий "как есть").

  3. Перекрывающий шаблон shallo-копирует текущий узел, затем копирует его атрибуты и, наконец, создает дочерний элемент текстового узла, содержимое которого является строковым значением атрибута nameтекущий (согласованный) элемент.

0 голосов
/ 15 марта 2012
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:t="http://abc.com">

  <xsl:output method="xml"/>

  <xsl:template match="*">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="dynamicVariable[@name]|t:dynamicVariable[@name]">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:value-of select="@name"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...