我正在使用Java学习XML和XSLT。我很久以前用ASP 3和Javascript使用这些技术创建了一些APP。现在我试图用Xpath记住一些技术,并了解如何用Java创建它。
我过去常常使用Xpath从XML中获取一些元素并将其转换为HTML输出。我一直试图在java中做同样的事情,但我觉得我有点失落。
我已经在其他帖子中查找过,但通常样本只是获取Node的值并在循环中显示。我想获得一段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中执行此操作?
如果我不清楚,请告诉我。
答案 0 :(得分:0)
transformer.transform接受一个javax.xml.transform.Source,它也可以是一个DOMSource。
javax.xml.transform.dom.DOMSource有一个构造函数,它接受一个节点。
当您评估xpath表达式时,请求NODE作为返回值。 (文本是默认值)并在其上调用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,并检查您是否只有一个返回值。
我也修复了你的xpath表达式。你错过了属性上的'@'。