我有以下输入文件,我想做的是适应REDCode,术语和名称等标准,我附加了样本输入和样本输出。
<?xml version="1.0"?>
<data>
<row>
<Date>2013-01-07</Date>
<Name>CDXNAIG</Name>
<Series>3</Series>
<Version>1</Version>
<Term>10Y</Term>
<REDCode>2I65BYAB1</REDCode>
<IndexID>DJCDX-NAIGS3V1-10Y</IndexID>
<Maturity>2015-03-20</Maturity>
<OnTheRun>N</OnTheRun>
<ModelPrice>0.9949284642210332</ModelPrice>
<ModelSpread>0.009331104270305838</ModelSpread>
</row>
<row>
<Date>2013-01-07</Date>
<Name>CDXNAIGCONS</Name>
<Series>3</Series>
<Version>1</Version>
<Term>10Y</Term>
<REDCode>2I65B0AB5</REDCode>
<IndexID>DJCDX-NAIGCONSS3V1-10Y</IndexID>
<Maturity>2015-03-20</Maturity>
<OnTheRun>N</OnTheRun>
<ModelPrice>0.9840941282706241</ModelPrice>
<ModelSpread>0.014379157758592408</ModelSpread>
</row>
<row>
<Date>2013-01-07</Date>
<Name>CDXEMexEU</Name>
<Series>18</Series>
<Version>1</Version>
<Term>5Y</Term>
<REDCode>1D765JAA2</REDCode>
<IndexID>CDX-EM-EXEUS18V1-5Y</IndexID>
<Maturity>2017-12-20</Maturity>
<OnTheRun>Y</OnTheRun>
<CompositePrice>1.1397499612219184</CompositePrice>
<CompositeSpread>0.019792819070343613</CompositeSpread>
<ModelPrice>1.1359120550302715</ModelPrice>
<ModelSpread>0.020550114606075833</ModelSpread>
<Depth>8</Depth>
<Heat>0.2778164733341895</Heat>
</row>
<row>
<Date>2013-01-07</Date>
<Name>CDXEMexEU</Name>
<Series>18</Series>
<Version>1</Version>
<Term>10Y</Term>
<REDCode>1D765JAA2</REDCode>
<IndexID>CDX-EM-EXEUS18V1-10Y</IndexID>
<Maturity>2022-12-20</Maturity>
<OnTheRun>Y</OnTheRun>
<CompositePrice>1.2256727099999931</CompositePrice>
<CompositeSpread>0.022458778204998295</CompositeSpread>
<ModelPrice>1.2203158240779826</ModelPrice>
<ModelSpread>0.02301955731474385</ModelSpread>
<Depth>3</Depth>
<Heat>0.280354127626739</Heat>
</row>
</data>
<row>
<Date>2013-01-07</Date>
<Name>CDXNAIG</Name>
<Series>3</Series>
<Version>1</Version>
<Term>10Y</Term>
<REDCode>2I65BYAB1</REDCode>
<IndexID>DJCDX-NAIGS3V1-10Y</IndexID>
<Maturity>2015-03-20</Maturity>
<OnTheRun>N</OnTheRun>
<ModelPrice>0.9949284642210332</ModelPrice>
<ModelSpread>0.009331104270305838</ModelSpread>
</row>
答案 0 :(得分:2)
要在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" />
然后,您可以使用XPath表达式检索与您的代码匹配的所有行:
//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>
如果要添加搜索条件,则必须决定如何组合它们(AND,OR),然后您还可以使用参数将该信息发送到XSLT并使用更精细的XPath表达式来选择所需内容。