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>