如何使用XSLT从XML生成完整的List和选定的Details



我在XML文件中有所有的数据,标记好了。数据是关于几千份简历的。我必须用Java构建一个前端,在其中我将以两种方式显示这些简历:

  1. 一个完整的HTML文件。
  2. 和一个完整的HTML文件的选择。例如:用户选择Java,那么这些有Java的简历将以HTML格式显示。

我已经编写了显示所有简历的XSLT代码。现在我对另一种类型的显示器很困惑。我需要专家的建议。:)

我还需要2个独立的XSLT以两种方式显示简历,如前所述。

* 更新:

public static void main(String[] args) throws IOException, URISyntaxException, TransformerException 
{
    TransformerFactory factory = TransformerFactory.newInstance();
    Source xslt = new StreamSource(new File("Resume.xslt"));
    Transformer transformer = factory.newTransformer(xslt);
    Source text = new StreamSource(new File("Resume.xml"));
    transformer.transform(text, new StreamResult(new File("ResumeAll.html")));
}

以上代码是使用XSLT将XML转换为HTML的Java代码。

这段代码将显示所有的resume。现在要显示特定的简历或选定的简历,我必须使用setParamaters()方法传递参数。对吧?

下面是XSLT示例代码:

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='html' media-type='text/html'/>
<xsl:template match="/">
<html>
 <body>
    <xsl:apply-templates/>
 </body>
</html>
</xsl:template>
<xsl:template match="Resume">
<table align='center' width='800' style="font-family:tahoma; font-size:13pt;">
<tr><td>
    <xsl:apply-templates/>
    </td></tr>
    </table>
</xsl:template>
<xsl:template match="Name">
<table align="center"><tr>
<th style="font-size:24pt; color:navy">
    <xsl:apply-templates/>
</th>
</tr></table>
</xsl:template>

上面的Java代码和XSLT文件将把XML转换成一个HTML文件,该文件将显示所有的resume。

我应该如何根据某些条件来展示简历?为此需要2个不同的XSLT文件吗?或者只有一个显示将工作与小修改?

您可以使用SAXSource而不是StreamSource作为源,并为其实现您自己的自定义过滤器。这个sax过滤器应该跳过您不希望在结果流中看到的标记。例如:

//...
TransformerFactory factory = TransformerFactory.newInstance();
Source xslt = new StreamSource(new File("Resume.xslt"));
Transformer transformer = factory.newTransformer(xslt);
SAXParser parser = saxParserFactory.newSAXParser();
XMLSkipResumeFilter reader = new XMLSkipResumeFilter(parser.getXMLReader(), resumeIdsToLeave);
InputStream is = new FileInputStream("Resume.xml");
Source text = new SAXSource(filter, is);
transformer.transform(text, new StreamResult(new File("ResumeAll.html")));
//...

XMLSkipResumeFilter.java:

public class XMLSkipResumeFilter extends XMLFilterImpl {
    private boolean skipCurrentTag = false;
    private Set resumeIdsToLeave;
    public XMLSkipResumeFilter(XMLReader parent, Set resumeIdsToLeave) {
        super(parent);
        this.resumeIdsToLeave = resumeIdsToLeave;
    }
    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
        // analyze if current tag should be skipped or check if parent tag is already marked as skipped
        // if (...) { return; }
        // if this resume should be rendered calling to super method
        // if (...) { super.startElement(uri, localName, qName, atts); }
    }
    //implements other method of XMLFilterImpl
}

相关内容

  • 没有找到相关文章

最新更新