Иметь этот XML:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root xmlns="http://www.edocu.com">
<page1>
<eDocuID>5a0b6b78</eDocuID>
<FormID>Test form</FormID>
</page1>
<page2>
<person>
<ssno>12345</ssno>
</person>
<address>
<ssno1>12345</ssno1>
<address_Street>Castle</address_Street>
<address_Number>22</address_Number>
<address_Letter>B</address_Letter>
<address_PostNo>1435</address_PostNo>
</address>
</page2>
</root>
Использовать этот XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:edocu="http://www.edocu.com">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes" encoding="UTF-8" standalone="yes" />
<xsl:variable name="schemaId" select="//edocu:eDocuID" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{name()}" namespace="http://www.asdf.no/eDocu/{$schemaId}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
<xsl:template match="//edocu:address">
<xsl:variable name="aaa" select="//edocu:address_Street"/>
<xsl:variable name="bbb" select="//edocu:address_Number"/>
<xsl:variable name="ccc" select="//edocu:address_Letter"/>
<xsl:element name="new_element">
<xsl:value-of select="concat($aaa,$bbb,$ccc)"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Результат XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root xmlns="http://www.asdf.no/eDocu/5a0b6b78">
<page1>
<eDocuID>5a0b6b78</eDocuID>
<FormID>Test form</FormID>
</page1>
<page2>
<person>
<ssno>12345</ssno>
</person>
<new_element xmlns="">Castle22B</new_element>
</page2>
</root>
То, что я пытаюсь сделать, это объединить триэлементы address_Street, address_Number и address_Letter в четвертый элемент new_element.Это прекрасно работает, но мои вопросы таковы:
- Все остальные элементы на том же уровне и элемент адреса исчезают.Как этого избежать?
- есть пустой атрибут xmlns = "" на new_element.Как это убрать?