2012-03-13 4 views
1

私はXSLTを通してXMLからXMLへの変換を行っています。私は出力XMLで名前空間を削除したい。そのために、結果プレフィックスオプションを除外しましたが、出力にはまだ名前空間が表示されます。XSLTの出力XMLに名前空間が入り込まないようにする方法

SorceのXML:書か

<?xml version="1.0" encoding="ISO-8859-1"?> 
<aaa> 
hello 
</aaa> 

XSLT:生産

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:simple="aaaa" xmlns:xlink="http://www.w3.org/1999/xlink"  xmlns:tcm="http://www.tridion.com/ContentManager/5.0" exclude-result-prefixes="msxsl simple wireframe widget tcdl tcm xlink"  xmlns:wireframe="bbb" xmlns:widget="ccc" xmlns:tcdl="tcdl"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" /> 
<xsl:template match="/"> 
    <wireframe:wireframe> 
     <wireframe:si> 
     <widget:ah> 
     <xsl:value-of select="aaa" /> 
       </widget:ah> 
     </wireframe:si> 
</wireframe:wireframe> 
</xsl:template> 
    </xsl:stylesheet> 

OUTPUT:

<?xml version="1.0" encoding="utf-8"?> 
<wireframe:wireframe xmlns:wireframe="aaaa"> 
    <wireframe:si> 
    <widget:ah xmlns:widget="bbb"> 
hello 
</widget:ah> 
    </wireframe:si> 
</wireframe:wireframe> 

出力Expexcted:

<?xml version="1.0" encoding="utf-8"?> 
<wireframe:wireframe> 
    <wireframe:si> 
    <widget:ah> 
hello 
</widget:ah> 
    </wireframe:si> 
</wireframe:wireframe> 

出力XMLに名前空間の表示を避ける方法を教えてください。

ありがとうございます。

+0

問題のXMLファイルとXSLTファイルのスニペットを提供できますか。 – alykhalid

+0

指定した出力は、名前空間の定義がないため、有効なXMLではありません。なぜあなたはそれを必要としますか? – newtover

+0

説明のために、ユーザーコントロール、taglibまたは何かsimilaへの参照を作成しようとしていますか? newtoverが尋ねるように、なぜプレフィックスが必要なのかは不明です。 –

答えて

2

あなたは除外属性に2つの使用される名前空間を残すことができるの

あなたのXSLTからそれらを除去することにより、完全に名前空間接頭辞を削除することができ

exclude-result-prefixes="msxsl simple xlink tcm tcdl" 

これは、2つのnamesp使用されるエースは、最初に使用された要素ではなく、ルート要素に表示されます。

<?xml version="1.0" encoding="UTF-8"?> 
<wireframe:wireframe xmlns:widget="ccc" xmlns:wireframe="bbb"> 
    <wireframe:si> 
     <widget:ah> 
hello 
</widget:ah> 
    </wireframe:si> 
</wireframe:wireframe> 
4

あなたができないことを求めています! XML名前空間はXMLの言語の一部です。これは、JavaのすべてのパッケージやC#の名前空間を削除するようなものです!

簡単に言えば、XML出力は無効なXMLドキュメントであり、有効なXMLを生成するように設計されたXSLTからは作成できません。

<?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" version="1.0" encoding="UTF-8" indent="yes" /> 
    <xsl:template match="/"> 
     <wireframe> 
      <secureInbox> 
       <alertHeader> 
        <xsl:value-of select="aaa" /> 
       </alertHeader> 
      </secureInbox> 
     </wireframe> 
    </xsl:template> 
</xsl:stylesheet> 

次のような結果生成します:

<wireframe> 
    <secureInbox> 
     <alertHeader> 
      hello 
     </alertHeader> 
    </secureInbox> 
</wireframe> 
3

実際にはこの非整形式XMLを生成することは可能ですが、実際には可能です。あなたはテキストにXSLTの出力タイプを設定し、次のように名前空間のないタグを生成することができます

<のxsl:テキスト無効にする出力エスケープ=「yes」を> & LTを、ワイヤーフレーム:ワイヤーフレーム& GT。 </XSL:テキスト>

等々...個人的に

、私は「自宅でこれをしようとしていない」カテゴリーの、このいずれかを検討していますが、適切なXSLTスタイルのためのダイムを与えていない場合、 先に行く!

+0

私はそんな純粋主義者ではないでしょう。このようなことをする理由はしばしばあります。たとえば、直列化されたXMLのフラグメントを生成して、大きなドキュメントに埋め込むことを考えたとします。出力タイプをテキストとして指定するとすぐに、それはもはやXMLではありません!とにかく、実際に質問に答えるために+1。 –

+0

私はあなたに+1を与えることはできません、ドミニクのように、私はこれが有効なXMLを出力していないと主張します。 「XSLTを使ったXMLからテキストへの変換に取り組んでいます...」という質問があれば、私の投票権を得ることができました。 –

関連する問題