2009-08-14 15 views
2

私はダイナミックXMLフィルタリングと(Javaで)変換

<?xml version='1.0' encoding='UTF-8'?> 
    <root> 
     <node name="foo1" value="bar1" /> 
     <node name="foo2" value="bar2" /> 
    </root> 

ようなXMLファイルを持って、私は方法

String processBar(String bar) 

を持っていると私は

<?xml version='1.0' encoding='UTF-8'?> 
    <root> 
     <node name="foo1" value="processBar("bar1")" /> 
     <node name="foo2" value="processBar("bar2")" /> 
    </root> 
で終わるしたいです

これを行う簡単な方法はありますか?好ましくはJavaで。ファイルが大きすぎて安全にメモリに完全にロードできないことに注意してください。大体恣意的なXMLやprocessBarのデータは複雑なので、正規表現は使用したくありません。あなたと属性値を置き換えることを意味すると仮定すると、

+1

本当にprocessBar属性の値は引用符で囲まれませんか? –

+0

これは不明だと思います。もしprocessBar( "x") - > "y"ならば、value = "y"を求めます。しかし、リテラル文字列 "processBar(\" x \ ")"を必要としません。これは、引用符なしで値を書くことを選択した理由です。 これが問題をより明確にすることを願っています。 – Jacob

+0

value = "processBar(" bar1 ")" - 引用符は表示されているとおりに無効です。 –

答えて

4

上processBarを呼び出した結果は、属性値が...

次のことを実行するためにJDKのXSLT APIを使用して、言った:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:java="http://xml.apache.org/xalan/java" 
       extension-element-prefixes="java"> 
    <xsl:template match="/root/node/@value"> 
    <xsl:attribute name="value"> 
     <xsl:value-of select="java:com.example.yourclass.processBar(string(.))"/> 
    </xsl:attribute> 
    </xsl:template> 
</xsl:stylesheet> 

これはXalan-Javaの拡張機能を使用し、静的メソッドを前提としています。オブジェクトのインスタンスを取得し、xsl:変数に格納することができます。

<xsl:variable name="frobber" select="java:com.example.Frobber.new()"/> 
<xsl:value-of select="java:processBar($frobber, string(.))"/> 

などです。

これはXalanでのみ動作しますが、これはJDKと一緒に配布されるXSLTプロセッサであるため、Xalanを使用するのは面倒です。

+0

FYI私はこれにいくつかのバグを修正しなければなりませんでした投稿後。しかし、アイデアは健全です。 ;) –

+0

これは素晴らしいですね。 の構文に関する説明はありますか?私はあなたのクラスなどをインスタンス化するためにどのコンストラクタが使用されているのだろうかと思っています。 – Jacob

+0

私は答えにいくつかの情報を追加しました。 –

0

あなたはJavaのXMLパーサで全体を解析したり、単なる文字列にファイルの内容を取得し、正規表現(すなわちhttp://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29を使用して)それを置き換えるかどちらか

+1

無制限のタグネスト、CDATAブロック、文字と外部参照、PI、コメントなどを考慮して、整形式のXMLを正しく解析する正規表現を思いついてください。 –

関連する問題