私は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>
おそらく1人か2人にとってはそれほど大したことではないかもしれませんが、要求された変更(名前空間の変更と削除)を除いて、出力ドキュメントは入力ドキュメントと1対1で同じように見える必要があるという制限があります。 。
私の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>
誰か助けてもらえますか?名前空間には注意が必要です:(
PS:私のエントリを編集した人:ありがとう:)