Я знаю, что вопрос немного неспецифичен, но я не знал, как это лучше сказать. Вот мой вопрос: у меня есть XML-документ и вы хотите преобразовать его в другой XML-документ с помощью XSL, но без древовидной структуры, чтобы все элементы отображались в виде списка. Пример:Получите все узлы как новые элементы без древовидной структуры
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>
<given_name>Peter</given_name>
<surname>Pan</surname>
<title>PhD</title>
</name>
<contactdata>
<email>[email protected]</email>
<office>
<building>B10</building>
<room>016</room>
</office>
<phone type="office"></phone>
</contactdata>
<organization>
<group>Something Cool</group>
<department>Awesome Stuff!!!</department>
</organization>
Будет transformated в:
<?xml version="1.0" encoding="UTF-8"?>
<shallow>
<person />
<person-name />
<person-name-given_name />
<person-name-surname />
<person-name-title />
<person-contactdata />
<person-contactdata-email />
<person-contactdata-office />
<person-contactdata-office-building />
<person-contactdata-office-room />
<person-contactdata-phone />
<person-organization />
<person-organization-group />
<person-organization-department />
</shallow>
Мой код до сих пор:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/*">
<shallow>
<xsl:apply-templates>
<xsl:with-param name="predecessor" select="local-name()"/>
</xsl:apply-templates>
</shallow>
</xsl:template>
<xsl:template match="*">
<xsl:param name="predecessor"/>
<xsl:element name="{$predecessor}"/>
<xsl:apply-templates>
<xsl:with-param name="predecessor" select="concat($predecessor, '-', local-name())"/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
Но это будет только итерацию до первого ребенка все и выход не совсем прав .....
Буду признателен за любую помощь, спасибо большое!
ах! Потрясающие!!! Неудивительно, что я не нашел ошибку, когда искал ее в неправильном месте ^^ Большое спасибо! –