JAVAでは、importNodeを使用して、あるXML文書から別の新しい文書にノードをコピーします。元のドキュメントには定義されているxmlnsがありますが、出力ドキュメントでは、コピーした各要素ごとにxmlnsを定義したくありません。どうやってするの?Java XML Transformerを使用してXMLNSを追加しないでください。
1
A
答えて
1
は良い解決策のようだ:
String stylesheet = "<?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\" indent=\"no\"/>" +
"<xsl:template match=\"*\">" +
"<xsl:element name=\"{local-name()}\">" +
"<xsl:for-each select=\"@*\">" +
"<xsl:attribute name=\"{local-name()}\">" +
"<xsl:value-of select=\".\"/>" +
"</xsl:attribute>" +
"</xsl:for-each>" +
"<xsl:apply-templates/>" +
"</xsl:element>" +
"</xsl:template>" +
"</xsl:stylesheet>";
StreamSource xslSource = new StreamSource(new StringReader(stylesheet));
Transformer transformer = tf.newTransformer(xslSource);
1
どういう意味ですか。 XML文書にxmlnsがある場合、それは実際には要素名の簡略表記です。例えばxmlnsは「http://example.com/#」であるならば、
<foo attr="xxx">...</foo>
のための真の要素名は、あなたがしたい場合は、
<http://example.com/#foo attr="xxx">...</http://example.com/#foo>
などのxmlnsずに書くでしょうhttp://example.com/#foo
、ありますそのように見えるようにXMLを出力するには、XMLライターのパラメータを調整することでそれを達成することが可能でなければなりません。
出力XMLを元のように表示するにはxmlnsを使用しない場合は、実際にはというXMLの意味を変更します。これを行うためのきれいな方法は、XSLトランスフォーマを使用することです。
1
あなたはJava XML Transformerを使用していますが、アイデンティティトランスフォーマ(TransformerFactory.newTransformer())を意味するのか、XSLTトランスフォーメーションのJavaインターフェイスを使用するのかは明確ではありません。
たとえば、要素名を変更するなどして、ドキュメントを変換する操作が必要なときにドキュメントをコピーする操作をしているかのように聞こえます。以下のように定義されたXSLでたjavax.xml.transform.Transformerを使用して
関連する問題
- 1. cocos2d-androidを使用してアンドロイドでEditTextを追加してください。
- 2. Qt:新しいタブでQPlainTextEditを追加してください
- 3. bower_concatをcssを追加しないでください
- 4. ReSharperで注釈を追加しないでください
- 5. TextViewにプログラムでテキストを追加しないでください
- 6. Javaを使用してケトルジョブ/変換を実行しないでください
- 7. Java DOM + Transformerを使用しているときにxml宣言でstandalone属性を省略しています。
- 8. IISリライト - WWWをサブドメインに追加しないでください
- 9. コード内に(jQuery)を追加しないでください
- 10. コンパイル時にvarを追加しないでください。
- 11. MySQL_real_escape_stringにスラッシュを追加しないでください。
- 12. 実装クラスにアスペクトを追加しないでください
- 13. Javaプログラム:メソッドを使用して印刷しないでください
- 14. SharePointサイトの新しいクイックスタートナビゲーションリンクを追加してください
- 15. 常にmy;を使用してください。ローカルを使用しないでください?
- 16. System.Threading.Timerを使用して同期しないでください。
- 17. を使用してください:android:layout_gravity
- 18. XElementがxmlnsを追加しました
- 19. d3追加して問題を入力してください
- 20. JavaScriptを使用してxmlを解析するとAJAXを使用しないでください。
- 21. preg_replaceを正しく使用しないでください
- 22. iphone sdkのNSMutableDictionaryで同じキーを追加しないでください。
- 23. Java xml Transformer to escape&
- 24. バスケットスクリプトに追加 - いくつかのデザインヘルプ、してください
- 25. ウェブインターフェイスを使用してサービスを設定してください
- 26. ビデオを壁のポストにプログラムで追加してください
- 27. MailChimpサブスクライバを、APIではなく、サインアップフォームのグループに追加してください。
- 28. ドッカーのホストネットワークと追加のネットワークを使用してください
- 29. JavaのRelaxNGスキーマ(xml構文)を照会してください。好ましくはJingを使用します。
- 30. main.xmlの上にonDrawドロアブルを追加してください
あなたはXSLトランスなしでそれを行う方法を知っていますか?私は通常のトランスを使用して、元のXMLからコピーされた各ノードに、xmlnsが追加されました - 私は望みません。 – Inez
私はあなたのアプリケーションが文書のすべての 'Element'ノードを訪問し、' setPrefix(...) 'を使って要素の接頭辞を変更することができると思います。警告があります。 javadocを読んでください。 –