を解析 -AntとXML設定ファイル、私は次のような形式のXMLファイルを持っている
<map MAP_XML_VERSION="1.0">
<entry key="database.user" value="user1"/>
...
</map>
アリがこれを読んで、私はキーの値を引き戻すためにXQueryを実行させるためのネイティブの能力を持っていますか? APIを通して、私はそのような機能を見ませんでした。
を解析 -AntとXML設定ファイル、私は次のような形式のXMLファイルを持っている
<map MAP_XML_VERSION="1.0">
<entry key="database.user" value="user1"/>
...
</map>
アリがこれを読んで、私はキーの値を引き戻すためにXQueryを実行させるためのネイティブの能力を持っていますか? APIを通して、私はそのような機能を見ませんでした。
scriptdefタグを使用して、クラスのJavaScriptラッパーを作成できます。 JSの中には、Javaの機能をほとんど持っていて、複雑なXML解析ができます。例えば
:
<project default="build">
<target name="build">
<xpath-query query="//entry[@key='database.user']/@value"
xmlFile="test.xml" addproperty="value"/>
<echo message="Value is ${value}"/>
</target>
<scriptdef name="xpath-query" language="javascript">
<attribute name="query"/>
<attribute name="xmlfile"/>
<attribute name="addproperty"/>
<![CDATA[
importClass(java.io.FileInputStream);
importClass(javax.xml.xpath.XPath);
importClass(javax.xml.xpath.XPathConstants);
importClass(javax.xml.xpath.XPathFactory);
importClass(org.xml.sax.InputSource);
var exp = attributes.get("query");
var filename = attributes.get("xmlfile");
var input = new InputSource(new FileInputStream(filename));
var xpath = XPathFactory.newInstance().newXPath();
var value = xpath.evaluate(exp, input, XPathConstants.STRING);
self.project.setProperty(attributes.get("addproperty"), value);
]]>
</scriptdef>
</project>
あなたはant-xpath-taskのようなものが欲しいですね。私はAntでこれを行う組み込みの方法を知らない。
オプションのAntタスクXMLTaskがこれを行うように設計されています。それにXPath式を与えて、上の方を選択してプロパティ(たとえば)を指定します。 Here's an articleの使用方法と例について説明します。それは他のXML関連の操作/クエリ/作成のトンを行うでしょう。
<xmltask source="map.xml">
<!-- copies to a property 'user' -->
<copy path="/map/entry[@key='database.user']/@value" attrValue="true" property="user"/>
</xmltask>
免責事項:私は著者です。
は、これまでのところ私は間違いなくこのアプローチのように、私は問題に実行しています。評価呼び出しでは30〜40秒間ハングし、javax.xml.xpath.XPathExpressionExceptionをラップするjavax.script.ScriptExceptionが発生します。私は、ドキュメント全体を選択するためにクエリを単純化しても、これを取得します。何かご意見は? – PHeath
私はあなたが作業しているXMLとxpathクエリを見なければならないでしょう。上記のサンプルは、テキスト要素を選択するようにのみ設計されています。ノードまたはノードセットを選択しようとしている可能性があります。 – Kevin
要素 "entry"の属性 "value"の値を返す必要があります。 xpathクエリは、ここに示した例と同じです。私が言及しなかったのは、Doctype(<!DOCTYPE map SYSTEM "http://java.sun.com/dtd/preferences.dtd">)と標準のxmlヘッダーが最上部にあることでした。 – PHeath