首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从plm检索值,使用xslt添加它们并在excel中显示

从plm检索值,使用xslt添加它们并在excel中显示
EN

Stack Overflow用户
提问于 2015-01-09 06:46:16
回答 1查看 972关注 0票数 0

从teamcenter结构管理器导出的plmxml代码:

代码语言:javascript
复制
    <?xml version="1.0" encoding="utf-8"?>

    <!-- GENERATED BY: PLM XML SDK 7.0.3.285 -->
    <PLMXML xmlns="http://www.plmxml.org/Schemas/PLMXMLSchema"
     schemaVersion="6" language="en-us" date="2014-12-30" time="18:11:34" author="Teamcenter V10000.1.0.20130604.00 - infodba@IMC--1989821519(-1989821519)">
    <Header id="id1" traverseRootRefs="#id7" transferContext="new_transfermode"></Header>
    <RevisionRule id="id2" name="Latest Working">
    <Description>Latest Working else Latest Any Status</Description>
    <ApplicationRef version="QEaRaYqhYa1ubA" application="Teamcenter" label="QEaRaYqhYa1ubA"></ApplicationRef></RevisionRule>
    <ProductView id="id4" ruleRefs="#id2" rootRefs="id7" primaryOccurrenceRef="id7">
    <ApplicationRef application="Teamcenter" label="QvfRqkT9Ya1ubA/QEaRaYqhYa1ubA/AAAAAAAAAAAAAA/BOM"></ApplicationRef>
    <UserData id="id3" type="TC Specific Properties">
    <UserValue value="imprecise" title="BOM_precision_type"></UserValue></UserData>
    <Occurrence id="id7" occurrenceRefs="id11 id15">
    <ApplicationRef application="Teamcenter" label="QvfRqkT9Ya1ubA/"></ApplicationRef>
    <UserData id="id6">
    <UserValue value="" title="bl_quantity"></UserValue></UserData>
    <UserData id="id8" type="AttributesInContext">
    <UserValue value="" title="AO_ID"></UserValue>
    <UserValue value="" title="SequenceNumber"></UserValue>
    <UserValue value="" title="OccurrenceName"></UserValue>
    <UserValue value="" title="Quantity"></UserValue></UserData>
    <Transform id="id5">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</Transform></Occurrence>
    <Occurrence id="id11" parentRef="#id7">
    <ApplicationRef application="Teamcenter" label="QvfRqkT9Ya1ubA/Q3YRqkT9Ya1ubA/"></ApplicationRef>
    <UserData id="id10">
    <UserValue value="10" title="bl_quantity"></UserValue></UserData>
    <UserData id="id12" type="AttributesInContext">
    <UserValue value="" title="AO_ID"></UserValue>
    <UserValue value="10" title="SequenceNumber"></UserValue>
    <UserValue value="" title="OccurrenceName"></UserValue>
    <UserValue value="10" title="Quantity"></UserValue></UserData>
    <Transform id="id9">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</Transform></Occurrence>
    <Occurrence id="id15" parentRef="#id7">
    <ApplicationRef application="Teamcenter" label="QvfRqkT9Ya1ubA/gTVRqkT9Ya1ubA/"></ApplicationRef>
    <UserData id="id14">
    <UserValue value="15" title="bl_quantity"></UserValue></UserData>
    <UserData id="id16" type="AttributesInContext">
    <UserValue value="" title="AO_ID"></UserValue>
    <UserValue value="20" title="SequenceNumber"></UserValue>
    <UserValue value="" title="OccurrenceName"></UserValue>
    <UserValue value="15" title="Quantity"></UserValue></UserData>
    <Transform id="id13">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</Transform></Occurrence></ProductView></PLMXML>

用于显示10 &15的xsl代码(来自plm xml),它们显示在相邻单元格中:

代码语言:javascript
复制
    <?xml version="1.0" encoding="utf-8" ?>

         <xsl:stylesheet version="1.0"
               xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
               xmlns:plm="http://www.plmxml.org/Schemas/PLMXMLSchema"
               xmlns="urn:schemas-microsoft-com:office:spreadsheet"
               xmlns:o="urn:schemas-microsoft-com:office:office"
               xmlns:x="urn:schemas-microsoft-com:office:excel"
               xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
               xmlns:html="http://www.w3.org/TR/REC-html40" >
        <xsl:output method="xml" version="1.0" indent="yes" />
         <xsl:strip-space elements="*"/>


         <xsl:template match="/">
             <xsl:processing-instruction name="mso-application">progid="Excel.Sheet"</xsl:processing-instruction>
            <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
              xmlns:o="urn:schemas-microsoft-com:office:office"
              xmlns:x="urn:schemas-microsoft-com:office:excel"
              xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
              xmlns:html="http://www.w3.org/TR/REC-html40">

              <Styles>
                <Style ss:ID="s22">
                  <Interior ss:Color="#C0C0C0" ss:Pattern="Solid"/>
                </Style>
                <Style ss:ID="s23">
                  <Font ss:Color="#FF0000"/>
                </Style>
                <!-- fix me: may be use different color -->
                <Style ss:ID="s24">
                  <Font ss:Color="#FF0000"/>
                </Style>
              </Styles>

              <Worksheet ss:Name="Sheet1">

                <Table>
                  <Column ss:AutoFitWidth="0" ss:Width="150" AutoFitWidth="1"/>
                  <Column ss:AutoFitWidth="0" ss:Width="150" AutoFitWidth="1"/>
                  <Column ss:AutoFitWidth="0" ss:Width="150" AutoFitWidth="1"/>
                  <Column ss:AutoFitWidth="0" ss:Width="100" AutoFitWidth="1"/>
                  <Column ss:AutoFitWidth="0" ss:Width="100" AutoFitWidth="1"/>
                  <Column ss:AutoFitWidth="0" ss:Width="100" AutoFitWidth="1"/>
                  <Column ss:AutoFitWidth="0" ss:Width="100" AutoFitWidth="1"/>
                  <Column ss:AutoFitWidth="0" ss:Width="100" AutoFitWidth="1"/>
                  <Column ss:AutoFitWidth="0" ss:Width="100" AutoFitWidth="1"/>
                  <Column ss:AutoFitWidth="0" ss:Width="100" AutoFitWidth="1"/>
                  <Column ss:AutoFitWidth="0" ss:Width="100" AutoFitWidth="1"/>
                <Row>
                    <Cell ss:StyleID="s22">
                      <Data ss:Type="String">
                        Assembly
                      </Data>
                    </Cell>
                  </Row>

                   <Row>
                   <Cell ss:StyleID="s22">
                      <Data ss:Type="String">

                      </Data>
                    </Cell>
                    <Cell ss:StyleID="s22">
                      <Data ss:Type="String">
                        PartA
                      </Data>
                    </Cell>
                    <Cell ss:StyleID="s22">
                      <Data ss:Type="String">
                       PartB
                      </Data>
                    </Cell>
                     <Cell ss:StyleID="s22">
                      <Data ss:Type="String">
                       PartA+PartB
                      </Data>
                    </Cell>
                  </Row>


                   <xsl:variable name="sum" select="'0'" />
                  <xsl:for-each select="plm:PLMXML/plm:ProductView/plm:Occurrence/plm:UserData/plm:UserValue[@title='bl_quantity']">
                  <xsl:variable name="a" select="@value" />
                  <xsl:variable name="sum" select="$sum + $a" />
                  </xsl:for-each>

                  <Row> 
                        <xsl:for-each select="plm:PLMXML/plm:ProductView/plm:Occurrence/plm:UserData/plm:UserValue[@title='bl_quantity']">
                        <Cell ss:StyleID="s22">
                        <Data ss:Type="String">

                        <xsl:value-of select="@value"/>

                    </Data>
                         </Cell>
                         </xsl:for-each> 
                         <Cell ss:StyleID="s22">
                       <Data ss:Type="String">
                       <xsl:value-of select="$sum"/>
                      </Data>
                    </Cell>  
                  </Row>    

                </Table>
                <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
                  <Selected/>
                  <ProtectObjects>False</ProtectObjects>
                  <ProtectScenarios>False</ProtectScenarios>
                </WorksheetOptions>
              </Worksheet>
            </Workbook>

          </xsl:template>

        </xsl:stylesheet>

我可以在excel中显示10和15,但添加部分不起作用。请帮我处理这个。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-09 09:05:58

在XSLT中,变量是不可变的,不能更改。这意味着增量sum的代码不能像您预期的那样工作。

代码语言:javascript
复制
<xsl:variable name="sum" select="'0'" />
<xsl:for-each select="plm:PLMXML/plm:ProductView/plm:Occurrence/plm:UserData/plm:UserValue[@title='bl_quantity']">
    <xsl:variable name="a" select="@value" />
    <xsl:variable name="sum" select="$sum + $a" />
</xsl:for-each>

事实上,在XSLT1.0中,这甚至可以被认为是一个错误,因为根据W3C规范,“如果一个由xsl:变量或xsl:param元素在模板中建立的绑定与xsl:变量或xsl:param元素在模板中建立的另一个绑定相形见绌,则这是一个错误”。(在XSLT2.0中,这不是一个错误,但是第二个sum仅限于xsl:for-each,与第一个sum不同。见http://www.w3.org/TR/xslt20/#scope-of-variables)

无论如何,要解决这个问题,您应该使用sum函数。而不是做

代码语言:javascript
复制
<xsl:value-of select="$sum"/>

做这个

代码语言:javascript
复制
<xsl:value-of 
     select="sum(plm:PLMXML/plm:ProductView/plm:Occurrence/plm:UserData/
                 plm:UserValue[@title='bl_quantity' and normalize-space(@value)]/@value)"/>

实际上,你可以通过在这里使用一个变量来简化事情。试试下面的XSLT片段

代码语言:javascript
复制
<xsl:variable name="bl_quantity" select="plm:PLMXML/plm:ProductView/plm:Occurrence/plm:UserData/plm:UserValue[@title='bl_quantity']" />
<Row> 
    <xsl:for-each select="$bl_quantity">
        <Cell ss:StyleID="s22">
            <Data ss:Type="String">
                <xsl:value-of select="@value"/>
            </Data>
        </Cell>
    </xsl:for-each> 
    <Cell ss:StyleID="s22">
       <Data ss:Type="String">
        <xsl:value-of select="sum($bl_quantity[normalize-space(@value)]/@value)"/>
      </Data>
    </Cell>  
</Row>    
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27855219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档