Java XSLT生成可重置的序列号 0 20110707 2949801 福 20110707 2949802 酒吧
对于上面的XML,您将如何编写XSLT转换来生成管道分隔的输出,每个行项目都有一个连续的“行项目”计数?每次发票号更改时,行项目计数应重置为1。此XSLT 2.0转换:Java XSLT生成可重置的序列号 0 20110707 2949801 福 20110707 2949802 酒吧,java,xml,xslt,Java,Xml,Xslt,对于上面的XML,您将如何编写XSLT转换来生成管道分隔的输出,每个行项目都有一个连续的“行项目”计数?每次发票号更改时,行项目计数应重置为1。此XSLT 2.0转换: <?xml version="1.0" encoding="UTF-8" ?> <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult"> <ERRORCODE>0</ERRORCODE> <PRO
<?xml version="1.0" encoding="UTF-8" ?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="01-25-2011" NAME="FileMaker" VERSION="Pro 11.0v3"/>
<DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="Export to Ledes" NAME="StateFarmLedes1998b.fp7" RECORDS="27" TIMEFORMAT="h:mm:ss a"/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="date of bill" TYPE="DATE"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Invoice #" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Company Name" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="25">
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949801</DATA>
</COL>
<COL>
<DATA>Foo</DATA>
</COL>
</ROW>
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949802</DATA>
</COL>
<COL>
<DATA>Bar</DATA>
</COL>
</ROW>
</RESULTSET>
</FMPXMLRESULT>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="01-25-2011" NAME="FileMaker" VERSION="Pro 11.0v3"/>
<DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="Export to Ledes" NAME="StateFarmLedes1998b.fp7" RECORDS="27" TIMEFORMAT="h:mm:ss a"/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="date of bill" TYPE="DATE"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Invoice #" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Company Name" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="25">
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949801</DATA>
</COL>
<COL>
<DATA>Foo</DATA>
</COL>
</ROW>
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949801</DATA>
</COL>
<COL>
<DATA>Foo</DATA>
</COL>
</ROW>
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949802</DATA>
</COL>
<COL>
<DATA>Bar</DATA>
</COL>
</ROW>
</RESULTSET>
</FMPXMLRESULT>
1,20110707,2949801,Foo
2,20110707,2949801,Foo
1,20110707,2949802,Bar
说明:
<?xml version="1.0" encoding="UTF-8" ?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="01-25-2011" NAME="FileMaker" VERSION="Pro 11.0v3"/>
<DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="Export to Ledes" NAME="StateFarmLedes1998b.fp7" RECORDS="27" TIMEFORMAT="h:mm:ss a"/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="date of bill" TYPE="DATE"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Invoice #" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Company Name" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="25">
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949801</DATA>
</COL>
<COL>
<DATA>Foo</DATA>
</COL>
</ROW>
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949802</DATA>
</COL>
<COL>
<DATA>Bar</DATA>
</COL>
</ROW>
</RESULTSET>
</FMPXMLRESULT>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="01-25-2011" NAME="FileMaker" VERSION="Pro 11.0v3"/>
<DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="Export to Ledes" NAME="StateFarmLedes1998b.fp7" RECORDS="27" TIMEFORMAT="h:mm:ss a"/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="date of bill" TYPE="DATE"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Invoice #" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Company Name" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="25">
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949801</DATA>
</COL>
<COL>
<DATA>Foo</DATA>
</COL>
</ROW>
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949801</DATA>
</COL>
<COL>
<DATA>Foo</DATA>
</COL>
</ROW>
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949802</DATA>
</COL>
<COL>
<DATA>Bar</DATA>
</COL>
</ROW>
</RESULTSET>
</FMPXMLRESULT>
1,20110707,2949801,Foo
2,20110707,2949801,Foo
1,20110707,2949802,Bar
将与组相邻属性一起使用
II。XSLT 1.0解决方案:
<?xml version="1.0" encoding="UTF-8" ?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="01-25-2011" NAME="FileMaker" VERSION="Pro 11.0v3"/>
<DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="Export to Ledes" NAME="StateFarmLedes1998b.fp7" RECORDS="27" TIMEFORMAT="h:mm:ss a"/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="date of bill" TYPE="DATE"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Invoice #" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Company Name" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="25">
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949801</DATA>
</COL>
<COL>
<DATA>Foo</DATA>
</COL>
</ROW>
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949802</DATA>
</COL>
<COL>
<DATA>Bar</DATA>
</COL>
</ROW>
</RESULTSET>
</FMPXMLRESULT>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="01-25-2011" NAME="FileMaker" VERSION="Pro 11.0v3"/>
<DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="Export to Ledes" NAME="StateFarmLedes1998b.fp7" RECORDS="27" TIMEFORMAT="h:mm:ss a"/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="date of bill" TYPE="DATE"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Invoice #" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Company Name" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="25">
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949801</DATA>
</COL>
<COL>
<DATA>Foo</DATA>
</COL>
</ROW>
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949801</DATA>
</COL>
<COL>
<DATA>Foo</DATA>
</COL>
</ROW>
<ROW MODID="25" RECORDID="54">
<COL>
<DATA>20110707</DATA>
</COL>
<COL>
<DATA>2949802</DATA>
</COL>
<COL>
<DATA>Bar</DATA>
</COL>
</ROW>
</RESULTSET>
</FMPXMLRESULT>
1,20110707,2949801,Foo
2,20110707,2949801,Foo
1,20110707,2949802,Bar
说明:
我们使用的模板匹配每个“组头”x:ROW
元素
我们指定了一个键,它通过“组头”的generate-id()
索引组中的任何x:ROW
。这样可以方便地指定整个组,并在其元素上应用模板(在“组”模式下)
使用基于前面同级的计数
xpath表达式@Mike,我可以测试的XSL将非常棒。当发票编号发生变化时,您将如何重置编号?@Sam-您能给出上述xml所需输出的示例吗?@Sam,发票编号是否为第二个
。如果是这样的话,我想我需要知道表达式出现时正在处理什么,这样我就可以创建一个Xpath表达式来标识包含行的先前同级。这不是答案,但我见过的最好的非简单xslt是Kathleen Dollard的代码生成.Net()的源代码如果您想看到一些关于如何使用xml/xslt完成一些复杂工作的示例,请查看她的资料。虽然她只是提供了xslt,但是您需要一个很好的语言语法参考,才能像理解一样理解它,谢谢!我需要将XSLT1.0用于我的解决方案,但我可以理解2.0有多干净。+1-在没有示例输出的情况下,理解了OP的意思。