我对xslt的可能性有疑问。可以用xslt完成吗?
输入:`
<invoice>
<record><field>ROWORD;123;;;</field></record>
<record><field>ROWART;shoe;10,2;20;</field></record>
<record><field>ROWORD;124;;;</field></record>
<record><field>ROWART;ball;1,5;2;</field></record>
<record><field>ROWART;car;1000;1;</field></record>
<record><field>ROWART;tractor;900;2;</field></record>
<record><field>ROWORD;125;;;</field></record>
<record><field>ROWART;computer;100;200;</field></record>
<record><field>ROWART;shoes;10,2;20;</field></record>
<record><field>ROWORD;126;;;</field></record>
<record><field>ROWART;keyboard;100;1;</field></record>
</invoice>
输出应该是:
<article>
<description>shoe</description>
<price>10,2</price>
<ordernumber>123</ordernumber>
<article>
<description>ball</description>
<price>1,5</price>
<ordernumber>124</ordernumber>
<article>
<description>car</description>
<price>1000</price>
<ordernumber>124</ordernumber>
<article>
<description>tractor</description>
<price>900</price>
<ordernumber>124</ordernumber>
<article>
<description>computer</description>
<price>100</price>
<ordernumber>125</ordernumber>
<article>
<description>shoe</description>
<price>10,2</price>
<ordernumber>125</ordernumber>
<article>
<description>keyboard</description>
<price>100</price>
<ordernumber>126</ordernumber>
我使用for-each循环记录。然后我将标记字段拆分为单独的变量(使用substring-before / substring-after)。使用if语句,我检查标签字段是否以ROWART开头,但后来我遇到了问题。我找不到找到响应订单号的方法。
所以,我正在寻找一种记住ROWORD的方法。
我的使用xslt的想法可能有问题。 我使用xslt 1.0。输入无法更改。
感谢您的帮助 奥利弗
答案 0 :(得分:1)
如何在ROWART项目上使用for-each,然后使用前面的兄弟:: ... ROWORD获取所需的额外数据?
像这样:
<xsl:for-each select="//field[starts-with(text(),'ROWART')]">
<article>
<description>
<xsl:value-of select="substring-before(substring-after(text(),';'),';')"/>
</description>
<price>
<xsl:value-of select="substring-before(substring-after(substring-after(text(),';'),';'),';')"/>
</price>
<ordernumber>
<xsl:variable name="ROWORDfields" select="../preceding-sibling::*[starts-with(field/text(),'ROWORD')]"/>
<xsl:value-of select="substring-before(substring-after($ROWORDfields[last()],';'),';')"/>
</ordernumber>
</article>
</xsl:for-each>