Я не уверен, возможно ли это, так как я очень плохо знаком с XSLT и прочим, но, возможно, некоторые из вас могли бы помочь мне здесь? Это немного сложно, и я не нашел ничего подобного в интернете:
Проблема в том, что у меня есть входной xml с объявленными пространствами имен и всем, и мне нужно только внести в него небольшие изменения (добавление или удаление атрибутов или перемещение их в другие места). Но в то же время я должен обновить ссылки на пространство имен в теге документа документа. Так, например, входной xml может выглядеть примерно так:
<order
xmlns="some.url.01"
xmlns:ns2="some.other.url"
xmlns:ns3="another.one"
>
<orderEntry>
<orderControl>
<mandant>test</mandant>
<businessUnit>test</businessUnit>
<inboundChannel>test</inboundChannel>
<timestamp>timestamp</timestamp>
<requestedDocuments>
<ns2:document>orderForm</ns2:document>
</requestedDocuments>
</orderControl>
</orderEntry>
</order>
Полученный XML должен выглядеть следующим образом:
<order
xmlns="some.url.02"
xmlns:ns2="some.other.url.02"
xmlns:ns3="another.one.02"
>
<orderEntry>
<orderControl>
<mandant>test</mandant>
<businessUnit>test</businessUnit>
<inboundChannel>test</inboundChannel>
<!-- deleted timestamp for example -->
<requestedDocuments>
<ns2:document>orderForm</ns2:document>
</requestedDocuments>
</orderControl>
</orderEntry>
</order>
но единственное, что я получаю:
<order
xmlns="some.url.02"
>
<orderEntry>
<orderControl>
<mandant>test</mandant>
<businessUnit>test</businessUnit>
<inboundChannel>test</inboundChannel>
<!-- deleted timestamp for example -->
<requestedDocuments>
<ns2:document xmlns:ns2="some.other.url.02">orderForm</ns2:document>
</requestedDocuments>
</orderControl>
</orderEntry>
</order>
Теперь, может быть, для одного или двух из вас это может быть не так уж важно, но у меня есть ограничение, что выходной документ должен выглядеть один к одному так же, как и входной документ, за исключением запрошенных изменений (изменения пространства имен и удаление).
Мой XSLT выглядит примерно так:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="some.url.02"
xmlns:ns2="some.other.url.02"
xmlns:ns3="another.one.02"
>
<xsl:output method="xml" version="1.0" encoding="UTF-8" standalone="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:choose>
<xsl:when test="name(.) != 'timestamp'">
<xsl:element name="{node-name(.)}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{node-name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Может кто-нибудь помочь, пожалуйста? Пространства имен хитры: (
П.С .: Кто бы ни редактировал мою запись: Спасибо:)