2017-02-08 7 views
0

Я искал решения для устранения проблемы, связанной с моим xml-файлом. Я хочу отредактировать его с помощью xslt. Я хочу, чтобы элементы содержались в верхнем узле, поэтому они будут на том же уровне, что и «id» и «date».Элементы субнома XML/XSLT на верхнем уровне

<test> 
 
- <invoice> 
 
    <id>163-01</id> 
 
    <date>2016-09-06</date> 
 
    - <order> 
 
     <cadreLegal>LAB</cadreLegal> 
 
     <prestataire>907</prestataire> 
 
     <personneProtegee>1951</personneProtegee> 
 
     <dateEtablissement>2016-09-06</dateEtablissement> 
 
     <heureEtablissement>13:22:00</heureEtablissement> 
 
     </order> 
 
</invoice> 
 
- <invoice> 
 
    <id>163-01</id> 
 
    <date>2016-09-06</date> 
 
    - <order> 
 
     <cadreLegal>LAB</cadreLegal> 
 
     <prestataire>907</prestataire> 
 
     <personneProtegee>1951</personneProtegee> 
 
     <dateEtablissement>2016-09-06</dateEtablissement> 
 
     <heureEtablissement>13:22:00</heureEtablissement> 
 
     </order> 
 
</invoice> 
 
    </test> 
 

Это то, что я хочу иметь.

<test> 
 
- <invoice> 
 
    <id>163-01</id> 
 
    <date>2016-09-06</date> 
 
    <cadreLegal>LAB</cadreLegal> 
 
    <prestataire>907</prestataire> 
 
    <personneProtegee>1951</personneProtegee> 
 
    <dateEtablissement>2016-09-06</dateEtablissement> 
 
    <heureEtablissement>13:22:00</heureEtablissement> 
 
</invoice> 
 
- <invoice> 
 
    <id>163-01</id> 
 
    <date>2016-09-06</date> 
 
    <cadreLegal>LAB</cadreLegal> 
 
    <prestataire>907</prestataire> 
 
    <personneProtegee>1951</personneProtegee> 
 
    <dateEtablissement>2016-09-06</dateEtablissement> 
 
    <heureEtablissement>13:22:00</heureEtablissement> 
 
</invoice> 
 
</test>

Я попробовал несколько кода с использованием XSLT, но я никогда не был в состоянии получить то, что я хочу. Я также попробовал решения, найденные в stackoverflow. Не могли бы вы помочь мне решить эту проблему?

<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()|@*" name="order"> 
 
    <xsl:copy> 
 
    <xsl:apply-templates select="node()|@*"/> 
 
    </xsl:copy> 
 
</xsl:template> 
 

 
<xsl:template match="invoice"> 
 
    <xsl:copy-of select="/*/order"/> 
 
    <xsl:call-template name="test"/> 
 
</xsl:template> 
 

 
</xsl:stylesheet>

Спасибо заранее.

Rflow

+0

«* I попробовал несколько кода с помощью xslt * «Почему бы вам не опубликовать свою попытку, чтобы мы могли ее исправить, вместо того, чтобы писать код для вас с нуля. –

+0

Благодарим вас за ответ. Я новичок с xslt. Большая часть кода, который я пробовал, была найдена в Интернете, которую я модифицировал, чтобы соответствовать моему примеру. – Rflow

+0

Я добавил один код, который использовал, я все еще смущен ... – Rflow

ответ

1

Вы хотите скопировать все, как есть, за order исключением - где вы только хотите скопировать своих детей, а не сам по себе:

XSLT 1,0

<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:strip-space elements="*"/> 

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

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

</xsl:stylesheet> 
+0

Спасибо. Я попробую это tommorow (файлы не на этом компьютере). Я получу те же результаты, что и мой второй xml-код? – Rflow

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

  • Нет связанных вопросов^_^