Со вчерашнего дня я экспериментирую с XSLT и после долгих усилий смог заставить свое задание работать. Это состоит в том, чтобы взять некоторые элементы, которые находятся в узле «ATTRIBUTE», и преобразовать их в атрибуты родительского элемента (которые, кстати, могут иметь разные имена). Это пример того, что мне нужно сделать:
Отсюда ->
<INVENTORY>
<ITEM>
<ATTRIBUTES>
<SERIALNUMBER>something1</SERIALNUMBER>
<LOCATION>something2</LOCATION>
<BARCODE>something3</BARCODE>
</ATTRIBUTES>
Some Item Value
</ITEM>
</INVENTORY>
Сюда ->
<INVENTORY>
<ITEM SERIALNUMBER="something1" LOCATION="something2" BARCODE="something3">
SomeItemValue
</ITEM>
</INVENTORY>
Однако, как это ни странно, я получаю атрибуты в родительском узле, но без каких-либо разделений и пробелов. Я пробовал несколько, несколько вещей, но, похоже, ни один из них не помог.
Это шаблон XSLT, который я использую для преобразования:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="us-ascii"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:if test="ATTRIBUTES">
<xsl:for-each select="ATTRIBUTES/*">
<xsl:attribute name="{name()}" separator=" ">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:for-each>
</xsl:if>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="ATTRIBUTES">
</xsl:template>
</xsl:stylesheet>
Результат, который я получаю, следующий:
<?xmlversion="1.0"encoding="us-ascii"?><INVENTORY><ITEMSERIALNUMBER="something1"LOCATION="something2"BARCODE="something3">SomeItemValue</ITEM></INVENTORY>
Однако, если попытаться поместить <xml:text> </xml:text>
внутри xsl:for-each
, я сразу перестану видеть атрибуты вместо того, чтобы получать пробелы.
Любая помощь приветствуется!