Java-如何过滤XML文档并使用过滤后的数据创建新的XML
我有下面的输入文件,我想做的是适合的标准,如红码,术语和名称,我附上了样本输入和样本输出 输入文件Java-如何过滤XML文档并使用过滤后的数据创建新的XML,xml,xslt,stax,Xml,Xslt,Stax,我有下面的输入文件,我想做的是适合的标准,如红码,术语和名称,我附上了样本输入和样本输出 输入文件 2013-01-07 CDXNAIG 3. 1. 10岁 2I65BYAB1 DJCDX-NAIGS3V1-10Y 2015-03-20 N 0.9949284642210332 0.009331104270305838 2013-01-07 CDXNAIGCONS 3. 1. 10岁 2I65B0AB5 DJCDX-NAIGCONSS3V1-10Y 2015-03-20 N 0.9840941
2013-01-07
CDXNAIG
3.
1.
10岁
2I65BYAB1
DJCDX-NAIGS3V1-10Y
2015-03-20
N
0.9949284642210332
0.009331104270305838
2013-01-07
CDXNAIGCONS
3.
1.
10岁
2I65B0AB5
DJCDX-NAIGCONSS3V1-10Y
2015-03-20
N
0.9840941282706241
0.014379157758592408
2013-01-07
CDXEMexEU
18
1.
5Y
1D765JAA2
CDX-EM-EXEUS18V1-5Y
2017-12-20
Y
1.1397499612219184
0.019792819070343613
1.1359120550302715
0.020550114606075833
8.
0.2778164733341895
2013-01-07
CDXEMexEU
18
1.
10岁
1D765JAA2
CDX-EM-EXEUS18V1-10Y
2022-12-20
Y
1.2256727099999931
0.022458778204998295
1.2203158240779826
0.02301955731474385
3.
0.280354127626739
应用过滤器后,REDCode=2I65BYAB1输出应如下所示
2013-01-07
CDXNAIG
3.
1.
10岁
2I65BYAB1
DJCDX-NAIGS3V1-10Y
2015-03-20
N
0.9949284642210332
0.009331104270305838
要在XSLT中获得匹配的节点或节点集,您必须根据输入(可能是发送给处理器的参数值)运行与条件匹配的模板
例如,假设您使用Java运行XSLT处理器,您可以使用如下内容:
Source xslt = new StreamSource(new FileInputStream("stylesheet.xsl"));
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer(xslt);
Source input = new StreamSource(new FileInputStream("input.xml"));
public Result searchByRedCode(String redcode) {
Result result = new StreamResult(new FileOutputStream("result.xml"));
t.setParameter("redcode", redcode); // this sends the parameter
t.transform(input, result);
}
这将把结果放入result.xml
现在在样式表中,您应该声明一个全局参数:
<xsl:param name="redcode" />
此样式表将执行以下操作:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="redcode" />
<xsl:template match="/">
<xsl:apply-templates select="//row[REDCode = $redcode]" />
</xsl:template>
<xsl:template match="row">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
如果要添加搜索条件,必须决定如何组合它们(和、或)然后,您还可以使用参数将该信息发送到XSLT,并使用更详细的XPath表达式来选择所需内容。您是在要求Java解决方案还是在XSLT中要求Java解决方案?目标
REDCode
是否有多个行
?如果是这样,那么如果希望输出格式良好,就需要在所需输出周围添加根元素。
<xsl:param name="redcode" />
//row[REDCode = $redcode]
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="redcode" />
<xsl:template match="/">
<xsl:apply-templates select="//row[REDCode = $redcode]" />
</xsl:template>
<xsl:template match="row">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>