【发布时间】:2012-08-20 12:33:44
【问题描述】:
我正在处理如下所示的发票数据(2 条记录):
<?xml version=1.0" encoding="Windows-1252"?>
<Line>
<SupplierID>Waltons</SupplierID>
<InvoiceID>MOD280229SI</InvoiceID>
<InvoiceDate>20120709</InvoiceDate>
<ItemID>847308</ItemID>
<ColorID>04</ColorID>
<Description>BANTEX Quotation Folder A4 3420</Description>
<MainCategory>FILES FILING</MainCategory>
<SubCategory>Quotation Folders</SubCategory>
<LineNum>17.0000000</LineNum>
<Qty>30.0000000</Qty>
<UnitPriceExclTax>19.2500000</UnitPriceExclTax>
<LineTax>80.8500000</LineTax>
<LinePriceExclTax>577.5000000</LinePriceExclTax>
<ColorName>Blue</ColorName>
<UOM>Ea</UOM>
<Backorder>0.0000000</Backorder>
<INVENTTRANSID>MOD2923560_060</INVENTTRANSID>
</Line>
<Line>
<SupplierID>Waltons</SupplierID>
<InvoiceID>MOD280229SI</InvoiceID>
<InvoiceDate>20120709</InvoiceDate>
<ItemID>847308</ItemID>
<ColorID>06</ColorID>
<Description>BANTEX Quotation Folder A4 3420</Description>
<MainCategory>FILES FILING</MainCategory>
<SubCategory>Quotation Folders</SubCategory>
<LineNum>18.0000000</LineNum>
记住上述结构,一个订单可能包含数百行这样的行。
我正在将这些打印到发票页面上,而一个页面上只能容纳 18 行,我在页面上的溢出规则已经可以解决这个问题了。
我唯一的问题是,我需要在第一页打印 1st 17,然后是余额结转,然后在下一页上以余额结转等开头。
我想按如下方式构造 XML
第一 16 行没有改变 在第 16 行之后,我想插入一个新行,其中只有余额结转 之后我想插入另一个空白行,总共 17 行(我想故意将最后一行留空) 在空行之后插入另一行包含 Balance Brought Forward 在这一行之后,我的数据可以继续,从第 17+ 行开始,然后在另外 15 行之后,做同样的事情,直到数据结束。
谁能指出我构建这样的东西的正确方向?
我可以做到这一点是 XSLT 1 或 2,甚至可能在 VBS 的 JavaScript 中做到这一点。
我可以控制 XML 的结构,我将它作为没有任何子元素的平面文件输出,因为我首先需要进行一些小的更改,然后我将它与我的 XML 文件的其余部分合并,所以可以说XML 以
开头和结尾一行我的意思是一条记录,所以上面的XML有2行(由于复制错误,第二行不完整)插入另一行,我的意思是我想添加一个完整的新XXX元素
好吧,假设我从包含 40 行(元素)的 XML 开始
<Line>
xxx
</Line> x40
我想要的内容如下:
<Line> <!-- x16 lines. from data -->
xxx
</Line>
<Line> - <!-- Inserted -->
<LinePriceExclTax>Balance Carried Forward</LinePriceExclTax>
</Line> - <!-- Inserted -->
<Line></Line>
<Line> - <!-- Inserted -->
<LinePriceExclTax>Balance Brought Forward</LinePriceExclTax>
</Line>
<Line> <!-- x15 lines. From data -->
xxx
</Line>
<Line> <!-- Inserted -->
<LinePriceExclTax>Balance Carried Forward</LinePriceExclTax>
</Line> <!-- Inserted -->
<Line></Line>
<Line> <!-- Inserted -->
<LinePriceExclTax>Balance Brought Forward</LinePriceExclTax>
</Line>
<Line> <!-- x9 lines. from data -->
xxx
</Line>
【问题讨论】:
-
请明确说明输入是格式良好的 XML 文档(其中一个根元素包含所有其他元素)还是您发布的具有多个顶级元素的片段。然后,如果您想使用 XSLT,请解释或显示您想要的输出格式,目前我很困惑您对术语“行”的使用是与 XML 片段中的
Line元素相关还是仅仅表示文本行。 -
另外,请注意,所提供的 XML 格式严重错误:没有单个顶部元素,非封闭的第二行元素(似乎也被截断了)。您必须向我们展示转换所需的确切输出。
-
我可以控制 XML 的结构,我将它作为没有任何子元素的平面文件输出,因为我首先需要进行一些小的更改,然后将其与我的 XML 的其余部分合并文件,所以可以说 XML 以
开头并以 结尾 -
行我的意思是一条记录,所以上面的XML有2行(由于复制错误,第2行不完整)插入另一行,我的意思是我想添加一个全新的
XXX 元素 -
在 .NET 等某些平台上,XSLT 转换的输入可以是没有根元素的片段,就像您发布的那样,XSLT 也可以输出片段。但是,到目前为止,我不确定您想要输入什么样的结果,请考虑向我们展示输入样本和您想要的相应结果样本。我想为了解决这个问题,你想要一个新元素之后的元素数量可以是一个参数,以便让我们轻松理解你的要求,只需考虑提供示例,其中添加/插入是在例如之后完成的。 3 个元素。