如何获得索引的XLS值?

时间:2014-06-17 22:11:59

标签: xml xslt

XML以各种元素(Title1,Title2 ... EndUse1,Enduse2等)呈现数组中的数据:

<EUseSummary>
    <Name>EUSummary</Name>
    <Title1 index="1">Proposed</Title1>
    <Title1 index="2">Proposed</Title1>
    <Title1 index="3">Proposed</Title1>
    <Title1 index="4">Standard</Title1>
    <Title1 index="5">Standard</Title1>
    <Title1 index="6">Standard</Title1>
    <Title1 index="7">Compliance</Title1>
    <Title1 index="8">CAHP</Title1>
    <Title2 index="1">Design</Title2>
    <Title2 index="2">Design</Title2>
    <Title2 index="3">Design</Title2>
    <Title2 index="4">Design</Title2>
    <Title2 index="5">Design</Title2>
    <Title2 index="6">Design</Title2>
    <Title2 index="7">Margin</Title2>
    <Title2 index="8">Design</Title2>
    <Title3 index="0">End Use</Title3>
    <Title3 index="1">Site (kWh)</Title3>
    <Title3 index="2">Site (therms)</Title3>
    <Title3 index="3">(kTDV/ft²-yr)</Title3>
    <Title3 index="4">Site (kWh)</Title3>
    <Title3 index="5">Site (therms)</Title3>
    <Title3 index="6">(kTDV/ft²-yr)</Title3>
    <Title3 index="7">(kTDV/ft²-yr)</Title3>
    <Title3 index="8">(kTDV/ft²-yr)</Title3>
    <Enduse1 index="0">Space Heating</Enduse1>
    <Enduse1 index="1">246</Enduse1>
    <Enduse1 index="2">286.5</Enduse1>
    <Enduse1 index="3">21.04</Enduse1>
    <Enduse1 index="4">255</Enduse1>
    <Enduse1 index="5">296.8</Enduse1>
    <Enduse1 index="6">21.80</Enduse1>
    <Enduse1 index="7">0.76</Enduse1>
    <Enduse1 index="8">23.18</Enduse1>
    <Enduse2 index="0">Space Cooling</Enduse2>
    <Enduse2 index="1">706</Enduse2>
    <Enduse2 index="3">18.02</Enduse2>
    <Enduse2 index="4">696</Enduse2>
    <Enduse2 index="6">17.62</Enduse2>
    <Enduse2 index="7">-0.40</Enduse2>
    <Enduse2 index="8">34.17</Enduse2>
    <Enduse3 index="0">IAQ Ventilation</Enduse3>
    <Enduse3 index="1">141</Enduse3>
    <Enduse3 index="3">1.11</Enduse3>
    <Enduse3 index="4">141</Enduse3>
    <Enduse3 index="6">1.11</Enduse3>
    <Enduse3 index="7">0.00</Enduse3>
    <Enduse3 index="8">1.11</Enduse3>
    <Enduse4 index="0">Other HVAC</Enduse4>
    <Enduse4 index="3">0.00</Enduse4>
    <Enduse4 index="6">0.00</Enduse4>
    <Enduse4 index="7">0.00</Enduse4>
    <Enduse4 index="8">0.00</Enduse4>
    <Enduse5 index="0">Water Heating</Enduse5>
    <Enduse5 index="2">193.7</Enduse5>
    <Enduse5 index="3">11.52</Enduse5>
    <Enduse5 index="5">193.7</Enduse5>
    <Enduse5 index="6">11.52</Enduse5>
    <Enduse5 index="7">0.00</Enduse5>
    <Enduse5 index="8">11.52</Enduse5>
    <Enduse6 index="0">Inside Lighting</Enduse6>
    <Enduse6 index="1">1,300</Enduse6>
    <Enduse6 index="3">10.80</Enduse6>
    <Enduse6 index="4">1,300</Enduse6>
    <Enduse6 index="6">10.80</Enduse6>
    <Enduse6 index="7">0.00</Enduse6>
    <Enduse6 index="8">10.80</Enduse6>
    <Enduse7 index="0">Appl. &amp; Cooking</Enduse7>
    <Enduse7 index="1">1,023</Enduse7>
    <Enduse7 index="2">60.4</Enduse7>
    <Enduse7 index="3">11.72</Enduse7>
    <Enduse7 index="4">1,023</Enduse7>
    <Enduse7 index="5">60.4</Enduse7>
    <Enduse7 index="6">11.72</Enduse7>
    <Enduse7 index="7">0.00</Enduse7>
    <Enduse7 index="8">80.78</Enduse7>
    <Enduse8 index="0">Plug Loads</Enduse8>
    <Enduse8 index="1">2,630</Enduse8>
    <Enduse8 index="3">21.07</Enduse8>
    <Enduse8 index="4">2,630</Enduse8>
    <Enduse8 index="6">21.07</Enduse8>
    <Enduse8 index="7">0.00</Enduse8>
    <Enduse8 index="8">21.07</Enduse8>
    <Enduse9 index="0">Exterior</Enduse9>
    <Enduse9 index="1">161</Enduse9>
    <Enduse9 index="3">1.24</Enduse9>
    <Enduse9 index="4">161</Enduse9>
    <Enduse9 index="6">1.24</Enduse9>
    <Enduse9 index="7">0.00</Enduse9>
    <Enduse9 index="8">1.24</Enduse9>
    <Enduse10 index="0">TOTAL</Enduse10>
    <Enduse10 index="1">6,208</Enduse10>
    <Enduse10 index="2">540.6</Enduse10>
    <Enduse10 index="3">93.52</Enduse10>
    <Enduse10 index="4">6,206</Enduse10>
    <Enduse10 index="5">550.8</Enduse10>
    <Enduse10 index="6">96.88</Enduse10>
    <Enduse10 index="7">3.36</Enduse10>
    <Enduse10 index="8">96.88</Enduse10>
    <Enduse11 index="0">Compliance Total</Enduse11>
    <Enduse11 index="1">1,094</Enduse11>
    <Enduse11 index="2">480.2</Enduse11>
    <Enduse11 index="3">48.69</Enduse11>
    <Enduse11 index="4">1,092</Enduse11>
    <Enduse11 index="5">490.5</Enduse11>
    <Enduse11 index="6">52.05</Enduse11>
    <Enduse11 index="7">3.36</Enduse11>
    <Enduse11 index="8">52.05</Enduse11>
    <Enduse13 index="0">PV Credit</Enduse13>
    <Enduse13 index="3">-3.00</Enduse13>
    <Enduse13 index="6"> </Enduse13>
    <Enduse13 index="7">3.00</Enduse13>

就我所能获得的XSL(使用XSLT 1.0):

<xsl:value-of select="/SDDXML/Model/Proj/EUseSummary/Title1/descendant-or-self::text()"/

我希望XLS为所有EUseSummary元素返回索引位置8的值:Title1,Title2,Title3,Enduse1,Enduse2,Enduse3 ... Enduse13。

1 个答案:

答案 0 :(得分:2)

如果您的输入格式正确(例如,如果它有一个</EUseSummary>结束标记),那么应用以下样式表:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>

<xsl:template match="/">
    <xsl:for-each select="EUseSummary/*[@index=8]">
        <xsl:value-of select="."/>
        <xsl:if test="position()!=last()">, </xsl:if>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

将返回:

CAHP, Design, (kTDV/ft²-yr), 23.18, 34.17, 1.11, 0.00, 11.52, 10.80, 80.78, 21.07, 1.24, 96.88, 52.05