2

私はこのペイロードを持っています。私が知りたいのは、この "TV:" 名前空間プレフィックスをその中のすべてのノードと要素に追加する方法です。

<TVInqResponse>
         <TVInqRS>
            <StatusCode>0</StatusCode>
            <StatusDescription>Success</StatusDescription>

This is what is expect to have as a result:

<**tv**:TVInqResponse>
         <**tv**:TVInqRS>
            <**tv**:StatusCode>0</**tv**:StatusCode>
            <**tv**:StatusDescription>Success</**tv**:StatusDescription>
4

1 に答える 1

1

この変換:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:tv="some:tv">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="*">
  <xsl:element name="tv:{name()}" namespace="some:tv">
   <xsl:apply-templates select="@*|node()"/>
  </xsl:element>
 </xsl:template>

 <xsl:template match="@*">
  <xsl:attribute name="{name}"><xsl:value-of select="."/></xsl:attribute>
 </xsl:template>
</xsl:stylesheet>

この XML ドキュメントに適用した場合(提供された不正な "playload" に基づいて...):

<TVInqResponse>
 <TVInqRS>
  <StatusCode>0</StatusCode>
  <StatusDescription>Success</StatusDescription>
 </TVInqRS>
</TVInqResponse>

必要な正しい結果が生成されます

<tv:TVInqResponse xmlns:tv="some:tv">
   <tv:TVInqRS>
      <tv:StatusCode>0</tv:StatusCode>
      <tv:StatusDescription>Success</tv:StatusDescription>
   </tv:TVInqRS>
</tv:TVInqResponse>

属性名も同じ名前空間に入れたい場合は、テンプレートに一致する属性を次のものに置き換えます

 <xsl:template match="@*">
  <xsl:attribute name="tv:{name()}" namespace="some:tv">
   <xsl:value-of select="."/>
  </xsl:attribute>
 </xsl:template>
于 2012-08-09T14:27:29.370 に答える