1

JavaでXMLとXSLTを勉強しています。これらの手法を使用して、ASP 3 と Javascript を使用して、かなり前にいくつかのアプリを作成しました。今、私は Xpath でいくつかのテクニックを覚えて、Java でこれを作成する方法を理解しようとしています。

以前は Xpath を作成して、XML からいくつかの要素を取得し、それを HTML 出力に変換していました。私はJavaで同じことをしようとしていますが、少し迷っていると思います。

ここで他の投稿を既に探しましたが、通常、サンプルはノードの値を取得してループで表示するだけです。XML のスニペットを取得し、これを出力 HTML に変換したいと考えています。

私はうまく動作するこの単純なサンプルを以下に持っています。

  Source source = new StreamSource("catalog.xml");
  Source xsl = new StreamSource("catalog.xsl");
  //Result result = new StreamResult(System.out);
  Result result = new StreamResult("output.html");

  TransformerFactory factory = TransformerFactory.newInstance();
  Transformer transformer = factory.newTransformer(xsl);
  transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  transformer.transform(source, result);

javax.xmlを使用しています。. javax.xml.xpathを使用した例をいくつか見ました。. また、Xpath の例もいくつかテストしました。

しかし、これまでのところ、XML からスニペット コードを取得し、これを output.html に変換する方法がわかりませんでした。

私のXML:

<catalog>
    <cd active="1">
        <title>Empire Burlesque</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
    </cd>
    <cd active="1">
        <title>Hide your heart</title>
        <artist>Bonnie Tyler</artist>
        <country>UK</country>
        <company>CBS Records</company>
        <price>9.90</price>
        <year>1988</year>
    </cd>
    <cd active="0">
        <title>Greatest Hits</title>
        <artist>Dolly Parton</artist>
        <country>USA</country>
        <company>RCA</company>
        <price>9.90</price>
        <year>1982</year>
    </cd>

</catalog>

たとえば、output.html で以下の Xpath だけを変換したい場合:

XPathExpression expr = xpath.compile("//catalog/cd[active='0']");

私のJavaでこれを行う方法は?

  • 単純な Xpath を使用して XSL でこれを実行できることはわかっていますが、これは単なる例です。

よくわからない場合は、お知らせください。

4

1 に答える 1

0

Transformer.transform は、DOMSource にすることもできる javax.xml.transform.Source を取ります。

javax.xml.transform.dom.DOMSource には、ノードを取るコンストラクターがあります。

xpath 式を評価するときは、戻り値として NODE を要求します。( text がデフォルトです) DOMsource をソースとして呼び出します。

たとえば、Jython では次のようになります。

from javax.xml.transform.stream import StreamSource, StreamResult
from javax.xml.transform import *
from javax.xml.xpath import *
from org.xml.sax import InputSource
from javax.xml.xpath.XPathConstants import *
from javax.xml.transform.dom import DOMSource

xsl=StreamSource('catalog.xsl')
# source = StreamSource( 'catalog.xml' )
result = StreamResult( 'output.html' )

xfact=XPathFactory.newInstance()
xpath=xfact.newXPath()
expr = xpath.compile("//catalog/cd[@active='0']")
x=expr.evaluate( InputSource( 'catalog.xml' ), NODE )

factory = TransformerFactory.newInstance()
transformer = factory.newTransformer(xsl)

transformer.setOutputProperty(OutputKeys.INDENT, "yes")
transformer.transform( DOMSource(x), result)

このバージョンではエラー チェックはありません: 代わりに NODESET を要求して、1 つだけの戻り値を取得したことを確認することをお勧めします。

xpath 式も修正しました。属性に「@」がありませんでした。

于 2013-08-22T15:28:30.453 に答える