Pergunta

Eu tenho um problema particular, eu não tenho certeza de como abordar. Aqui no escritório há esta grande XSLT pesado que temos para adaptar um tipo de XML para outro. O problema é que não é muito consistente escrito e muito difícil de seguir. No antigo criação deste estilo, parece que foi esquecido exatamente o que ele faz.

Existe uma maneira de mapear facilmente em um formato legível exatamente o que o XSLT gigante faz? ou seja, cada possível entrada -> Cada saída possível. Não podemos criar uma abrangente todos os documentos de entrada, uma vez que o adaptador tem um comportamento diferente para a entrada diferente (Nós estimamos que levaria 100+ documentos de entrada para cobrir cada saída possível)

Qualquer sugestão seria muito bem-vindos.

Foi útil?

Solução

Break it up - mover as declarações de execução XSL para modelos XSL dentro do documento. Ao fazer isso, você vai trabalhar para baixo para um entendimento mais razoável do documento de cima para baixo.

E se é tão incrivelmente gigantesca como para impedir que você entendê-lo, isso soa como você tem uma decisão re-factoring à frente de você: é este documento tão importante que precisamos saber o que ele faz (e entender como ele funciona - exigindo, portanto, alguns re-trabalho), ou podemos viver com ele como está?

Outras dicas

Você entende seus documentos de entrada?

Se sim salto próxima frase outra não: -

Em seguida, você não pode testar qualquer re-fator resultante de XSLT, portanto, você precisa para fazer a resposta a esta pergunta, sim.

Você entende seus documentos de saída?

Se sim salto próxima frase outra não: -

Em seguida, você não pode testar qualquer re-fator resultante do XSLT, portanto, você precisa para fazer a resposta a esta quesion, Sim.

Agora que as respostas para as duas perguntas é sim, vala a XSLT e construir algo que você possa entender. Você sabe o que a entrada é e você sabe o que de saída desejado, clássico von-Newman (eles ainda ensinam que estes dias?).

Geralmente isso é tarefa impossível - para qualquer linguagem de programação

Isso decorre da indecisão de o problema da parada .

Por isso, você pode colocar um enorme esforço na tentativa de fazer algo que é provado ser impossível.

Minha recomendação é escrever sua própria solução , seguindo as melhores práticas de programação, testes usando unidade e, se possível, provas de correção. XSLT como uma linguagem funcional é mais adequado para provar correção.

Isto não está indo para ajudá-lo com toda a probabilidade. Mas eu vou compartilhar minha experiência.

Eu estava a tratar-me a XSLT apenas cerca de ontem, quando eu tive o mesmo problema ao tentar descobrir o que a especificação XSLT estava dizendo w.r.t. análise. O que eu fiz, para me ajudar, foi adicionar um par de funções (xsl: template de, ser pedante) para o XSL originais. Em seguida, eu corri através do browser, e pronto, eu tinha uma imagem clara do DFS.

Eu criei o seguinte:

<xsl:template name="print">
<xsl:param name="message"/>
<xsl:param name="elem"/>
<div class="ArticleBody">
  <br/>
  <xsl:value-of select="$message"/>: <xsl:value-of select="$elem"/> ... <br/>
</div>

O modelo print é o trabalhador eo prólogo e epílogo simplesmente chama print com cordas personalizados.

E eu coloquei altera o arquivo XSL original:

<xsl:template match="db:para">
 <xsl:apply-templates/>
</xsl:template>

para:

<xsl:template match="db:para">
 <xsl:call-template name="prologue">
   <xsl:with-param name="item" select="'para'"/>
 </xsl:call-template>
 <xsl:apply-templates/>
 <xsl:call-template name="epilogue">
  <xsl:with-param name="item" select="'para'"/>
 </xsl:call-template>

Eu agora obter uma saída quando cada nó foi processado:

start-processing: article ... 

e quando ele completou

end-processing: article ...

Eu joguei em um pouco de CSS, bem como (ao processar o nó raiz) apenas para que as coisas parecem boas. E esse tipo de fez o meu dia :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top