Я новичок, когда речь заходит о переводах XSLT, и некоторое время искал этот вопрос, но не нашел ответа на него. У меня есть XML-файл вид:Перемещение и переименование содержимого узла XML
<item>
<code>I001</code>
<description>DEF</description>
<properties>
<line1>
<key>key 1</key>
<value>value 1</value>
</line1>
<line2>
<key>key 2</key>
<value>value 2</value>
</line2>
</properties>
</item>
маркированного программное обеспечение, которое мне нужно обрабатывать эти данные с не справиться с этим видом уровневого XML, так что я должен превратить его в нечто вроде этого
<?xml version="1.0" encoding="utf-8"?>
<item>
<code>I001</code>
<description>DEF</description>
<P1_key>key 1</P1_key>
<P1_value>value 1</P1_value>
<P2_key>key 1</P2_key>
<P2_value>value</P2_value>
</item>
до сих пор я придумал с XSL-файл, который выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<!-- Identity rule -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<!-- special rules ... -->
<xsl:template match="properties/line1/*">
<xsl:element name="P1_{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="properties/line2/*">
<xsl:element name="P2_{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Это делает только отчасти то, что мне нужно (переименование элементов), остроумие результат вида:
<?xml version="1.0" encoding="utf-8"?>
<item>
<code>I001</code>
<description>DEF</description>
<properties>
<line1>
<P1_key>key 1</P1_key>
<P1_value>value 1</P1_value>
</line1>
<line2>
<P2_key>key 1</P2_key>
<P2_value>value</P2_value>
</line2>
</properties>
</item>
Что я теперь хотел бы сейчас, как переместить переименованные элементы (P1_key, P1_value, P2_key, P2_value) до уровня.
Любые советы были бы оценены.
Благодаря
Привет, спасибо за ваши предложения. Поскольку реальный XML, который я хочу преобразовать, несколько сложнее, чем мой пример, я думаю, что пойду со вторым предложением. В то же время у меня появилась возможность записать все, но это оставило меня с XSLT-файлом в 53 КБ! Еще раз спасибо! –