1
我有一些文章行可能會或可能沒有訂單號。如果該行未輸入訂單號,我想將最新的現有訂單號顯示爲此訂單號。XSLT和重新使用裏面的值每個
<?xml version="1.0" encoding="utf-8"?>
<Invoice>
<InvoiceNumber>123</InvoiceNumber>
<OrderNumber>head1</OrderNumber>
<Rows>
<Row>
<ArticleNumer>1</ArticleNumer>
<OrderNumber>line1</OrderNumber>
<Quantity>1</Quantity>
<Price>10</Price>
</Row>
<Row>
<ArticleNumer>2</ArticleNumer>
<OrderNumber><!--Here i want line1--></OrderNumber>
<Quantity>1</Quantity>
<Price>10</Price>
</Row>
<Row>
<ArticleNumer>3</ArticleNumer>
<OrderNumber><!--Here i want line1--></OrderNumber>
<Quantity>1</Quantity>
<Price>10</Price>
</Row>
<Row>
<ArticleNumer>4</ArticleNumer>
<OrderNumber>line2</OrderNumber>
<Quantity>1</Quantity>
<Price>10</Price>
</Row>
<Row>
<ArticleNumer>4</ArticleNumer>
<OrderNumber><!--Here i want line2--></OrderNumber>
<Quantity>1</Quantity>
<Price>10</Price>
</Row>
</Rows>
</Invoice>
我在行上使用for-each,這似乎使整個事情變得複雜一點。 通過使用前兄弟我可以得到最新的現有值,如果第二行是空的。但如果第三和第四行缺少訂單號碼,我怎麼能得到它?
在if-statment中創建變量不起作用。 在for-each中使用模板會給我一個錯誤信息。 我也想過使用一個計數器,爲每個空的訂單號碼行添加1,並使用前兄弟姐妹,但不能真正看到我面前的解決方案。
任何想法?
最好的問候, 安德烈亞斯
下面是更多的,我使用完全相同的代碼:
現在它會是更加混亂了一下呢。特別是當我非常不熟悉XSLT時。 Best_nr2是我的示例中的Ordernumber。但是:
<xsl:for-each select="Invoice/Tables/Table/TableRow">
<xsl:if test="string-length(Field [@Type='best_nr2']/text())<2 and
string-length(preceding-sibling::TableRow/Field [@Type='best_nr2']/text())<2 ">
<secondaryorder_number>
<xsl:value-of select="$dispatchOrderNr"/>
</secondaryorder_number>
</xsl:if>
<xsl:if test="string-length(Field [@Type='best_nr2']/text())>2">
<secondaryorder_number>
<xsl:value-of select="Field [@Type='best_nr2']/text()"/>
</secondaryorder_number>
</xsl:if>
<xsl:if test="string-length(Field [@Type='best_nr2']/text())<2 and
string-length(preceding-sibling::TableRow/Field [@Type='best_nr2']/text())>2 and
preceding-sibling::TableRow[1]/Field [@Type='best_nr2']/text()>2 ">
<secondaryorder_number>
<xsl:value-of select="preceding-sibling::TableRow[1]/Field [@Type='best_nr2']/text()"/>
</secondaryorder_number>
</xsl:if>
<xsl:if test="string-length(Field [@Type='best_nr2']/text())<2 and
string-length(preceding-sibling::TableRow[1]/Field [@Type='best_nr2']/text())<2
and string-length(preceding-sibling::TableRow/Field[@Type='best_nr2']/text())>2">
<secondaryorder_number>
</secondaryorder_number>
</xsl:if>
<lit_quantity>
<xsl:value-of select="translate(Field [@Type='lit_deliveredquantity'], ' ,',' .')"/>
</lit_quantity>
</LineItem>
<xsl:variable name="dispatchbestnr2" select="Field [@Type='best_nr2']/text()"/>
</xsl:for-each>
</LineItems>
</Dispatchnote>
</xsl:for-each
那麼樣式表是一個完整的樣本來處理您的輸入樣本。當然,模板不屬於「for-each」。如果您需要幫助將我的建議集成到您的代碼中,那麼我們需要查看您的代碼(儘管如果它是一個包含大量嵌套對象的模板,那麼恐怕將這兩種方法結合起來很困難)。 –
第一篇文章編輯。 – Dreas89
如果我只有一種方法來保存最新的現有訂單號/ best_nr2,然後打印它,所有這些都是非常好的。 – Dreas89