
下記のようなXMLに
<?xml version="1.0" encoding="EUC-JP"?>
<parent xmlns:xhtml="http://parent">
<child id="A1">
<taroh xmlns="http://child">
<age>10</age>
</taroh>
</child>
</parant>
下記のようなXSLTを適用した場合、
<?xml version="1.0" encoding="EUC-JP"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="xml"/>
<xsl:template match="text()|@*">
</xsl:template>
<xsl:template match="node()[@id='A1']">
<xsl:copy-of select="./node()"/>
</xsl:template>
</xsl:stylesheet>
通常下記のような結果となりますが、
<?xml version="1.0" encoding="EUC-JP"?>
<taroh xmlns="http://parent">
<age>10</age>
</taroh>
namespaceを変更させずに、下記のような結果を
得るためにはどのようにすればよいでしょうか?
<?xml version="1.0" encoding="EUC-JP"?>
<taroh xmlns="http://child">
<age>10</age>
</taroh>
抽出には
javax.xml.transform.Transformerを用いています。
どうか、よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
#1で回答した者です。
こちらで試した限りでは、接頭辞のあるなしに関係なく、taroh要素は、元々属していたnamespaceに属している結果となりました。
<taroh xmlns="http://child">
<age>10</age>
</taroh>
XSLTの仕様からもこれが正しい動作だと思います。
XTやXalanの最新版を使うと結果はどうなりますか?
※ Javaのバージョンが1.4以上の場合、javaのオプションに以下のように指定しないと、標準で付属する方が使われてしまいます(参考URL)。
java -Djava.endorsed.dirs=d:\xml_tool\xalan-j_2_4_1\bin ...
参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/guide/st …
No.1
- 回答日時:
日数が経ってしまっているので解決済みかもしれませんが、誰も答えてないので、とりあえずアドバイスを。
コピーアンドペースト(</parant>は</parent>に修正)して試してみても、
<taroh xmlns="http://child" xmlns:html="http://parent">
<age>10</age>
</taroh>
のようになって、namespaceが置き換えられてしまうような結果は再現しません。
xmlns:html="http://parent"が余計に付いてますが、出力される要素が属するnamespaceはあくまで"http://child"の方です。それとも、この宣言を除きたいのでしょうか?
いずれにしても、補足していただく必要があると思います。
回答ありがとうございます。
ずいぶん遅くなりましたが、補足させていただきます。
例のXMLが間違っていました。
実際は下記のように親のネームスペースに接頭辞が付かな状況を想定していました。
<?xml version="1.0" encoding="EUC-JP"?>
<parent xmlns="http://parent">
<child id="A1">
<taroh xmlns="http://child">
<age>10</age>
</taroh>
</child>
</parent>
そして、あくまで抽出されたXMLのネームスペースは
xmlns="http://child"
であることを期待しています。
とりあえず、接頭辞を付ける事を義務付けるという
解決策で消極的ではありますが、回避策としています。
上記のような方法でなく、解決することもできるのでしょうか?
あるいは、接頭辞という概念が存在すること自体がこの問題の解決策であるような気もしています。
どんなことでも、ご教示いただければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XML、XSLTの適応エラー(IEから...
-
XSLT
-
同じタグ名の項目取得
-
東芝のDynabookなのですがアン...
-
CPUの考え方を教えてください ...
-
XMLファイル内のデータ(値)を変...
-
DTDファイルをクラスパスから読...
-
SNMP リンクダウンとノードダ...
-
MSXMLを使ってノードを削除した...
-
VBA コードを中断するには?
-
XMLファイルの作り方がわかりま...
-
xml→htmlへの変換&ページ分割...
-
VBでXMLファイルを作ると xmlns...
-
タグの有無の判定
-
最長経路探索
-
ExcelVBAで書き出した文字が化ける
-
複数のマックPCによる数値計算...
-
XSL内でJavaScriptを記述し、Ja...
-
制限付きアカウントでxmlを読み...
-
VBSでxmlの値を書き換えたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XML、XSLTの適応エラー(IEから...
-
xmlファイルが上手にHTMLに変換...
-
XSLTでの正規表現判定
-
XSLT
-
xmlstarletで他ファイルからエ...
-
xsltを利用して変換後改行が入る
-
xalanが利用できません。
-
XML+XSLTでの表示について
-
XMLを出力する時のエラー原因
-
IE7とFireFox2での動作
-
XMLをxalanでXSL-FOに変換する
-
XMLを勉強中なのですが・・・
-
CPUの考え方を教えてください ...
-
東芝のDynabookなのですがアン...
-
ルート要素ノードが2個ある場合?
-
SNMP リンクダウンとノードダ...
-
XMLで要素が記述された順番に意...
-
Excel-VBAでXMLの複数ノードの...
-
複数のマックPCによる数値計算...
-
バッチファイルでテキストファ...
おすすめ情報