2012-03-22 25 views
3

SOAP以外のメッセージから名前空間プレフィックスを削除する必要があります。XSLT:要素から名前空間プレフィックスを削除する

これは、SOAPエンベロープが削除されたメッセージです。あなたが要素にそれがNS1接頭辞が含まれて見ることができるように:これに

<ns1:BookingSource xmlns:ns1="urn:EDI/Booking/artifacts"> 
    <ns1:BookingHeader> 
     <ns1:BookingNo>000123</ns1:BookingNo> 
     <ns1:BookingDate>01/01/2012</ns1:BookingDate> 
     <ns1:DSBookingDetail> 
      <ns1:BookingNo>000123</ns1:BookingNo> 
      <ns1:SeqNo>1</ns1:SeqNo> 
      <ns1:LineType>Item</ns1:LineType> 
      <ns1:ProductCode>Box</ns1:ProductCode> 
     </ns1:DSBookingDetail> 
     <ns1:DSBookingDetail> 
      <ns1:BookingNo>000123</ns1:BookingNo> 
      <ns1:SeqNo>2</ns1:SeqNo> 
      <ns1:LineType>Item</ns1:LineType> 
      <ns1:ProductCode>BrakeShoe</ns1:ProductCode> 
     </ns1:DSBookingDetail> 
    </ns1:DSBookingHeader> 
    <ns1:BookingHeader> 
     <ns1:BookingNo>000124</ns1:BookingNo> 
     <ns1:BookingDate>01/01/2012</ns1:BookingDate> 
     <ns1:DSBookingDetail> 
      <ns1:BookingNo>000124</ns1:BookingNo> 
      <ns1:SeqNo>1</ns1:SeqNo> 
      <ns1:LineType>Item</ns1:LineType> 
      <ns1:ProductCode>Box</ns1:ProductCode> 
     </ns1:DSBookingDetail> 
     <ns1:DSBookingDetail> 
      <ns1:BookingNo>000124</ns1:BookingNo> 
      <ns1:SeqNo>2</ns1:SeqNo> 
      <ns1:LineType>Item</ns1:LineType> 
      <ns1:ProductCode>BrakeShoe</ns1:ProductCode> 
     </ns1:DSBookingDetail> 
    </ns1:DSBookingHeader> 
</ns1:BookingSource> 

:私はKBを通じて検索し、それを行う方法についていくつかのヒントを見つけた

<BookingSource> 
    <BookingHeader> 
     <BookingNo>000123</BookingNo> 
     <BookingDate>01/01/2012</BookingDate> 
     <DSBookingDetail> 
      <BookingNo>000123</BookingNo> 
      <SeqNo>1</SeqNo> 
      <LineType>Item</LineType> 
      <ProductCode>Box</ProductCode> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <BookingNo>000123</BookingNo> 
      <SeqNo>2</SeqNo> 
      <LineType>Item</LineType> 
      <ProductCode>BrakeShoe</ProductCode> 
     </DSBookingDetail> 
    </DSBookingHeader> 
    <BookingHeader> 
     <BookingNo>000124</BookingNo> 
     <BookingDate>01/01/2012</BookingDate> 
     <DSBookingDetail> 
      <BookingNo>000124</BookingNo> 
      <SeqNo>1</SeqNo> 
      <LineType>Item</LineType> 
      <ProductCode>Box</ProductCode> 
     </DSBookingDetail> 
     <DSBookingDetail> 
      <BookingNo>000124</BookingNo> 
      <SeqNo>2</ns1:SeqNo> 
      <LineType>Item</LineType> 
      <ProductCode>BrakeShoe</ProductCode> 
     </DSBookingDetail> 
    </DSBookingHeader> 
</BookingSource> 

を、しかし、最終的な解決策は私を回避する。

ありがとう、 トニー。

+0

あなたのXMLが有効ではありません - 最初の ''一致していません前の開始タグ。 –

+0

質問を作成していたときに終了タグを紛失しました。 –

答えて

15

それは、名前空間と呼ばれる以下のすべての要素から名前空間を削除するためのコードであると属性ます。..

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="*"> 
    <xsl:element name="{local-name(.)}"> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:element> 
    </xsl:template> 
    <xsl:template match="@*"> 
    <xsl:attribute name="{local-name(.)}"> 
     <xsl:value-of select="."/> 
    </xsl:attribute> 
    </xsl:template> 
</xsl:stylesheet> 
+1

経験のあるXMLユーザーは、この変換を「接頭辞の削除」と記述しません。はるかに基本的なことをしています。名前空間を変更して要素の名前を変更しています。 –

+2

@MichaelKay、あなたは間違った場所でコメントしています。私はそれを「プレフィックスを取り除く」とは言わなかった。代わりに、私は修正した。私はあなたが質問にコメントすると思います。 –

関連する問題