xslt属性值基于元素值

时间:2016-01-27 14:48:59

标签: xml xslt

我有xslt这个问题。样式表中有一个名为misctables的表,它放在变量miscTables中。例如,在节点

<row>
                    <col id="_96PLATE">A01</col>
                    <col id="_384PLATE">A1,A2,B1</col>
                    <col id="TYPE">PATIENT</col>
                </row>

ID =&#34; _384PLATE&#34;值A1,A2,B1。当我对它进行标记并将其与xml进行比较时,我将保存R [@i = 2] / C / @ i的属性值。在这种情况下,我需要获得值2,3,26

XML

<?xml version="1.0" encoding="UTF-8"?>
<Message>
    <Header>
        <Id>ID:172.27.65.115-151c82bbb14-3:0</Id>
        <Instance>DataMarshalerBC</Instance>
        <Source>SMX</Source>
        <Destination>DMI</Destination>
        <Date>2015-12-22</Date>
        <Time>06:03:58</Time>
        <Status>ok</Status>
    </Header>
    <Data>
        <Data>
            <R i="2">
                <C i="0"/>
                <C i="1">Temperature(¡C)</C>
                <C i="2">A1</C>
                <C i="3">A2</C>
                <C i="4">A3</C>
                <C i="5">A4</C>
                <C i="6">A5</C>
                <C i="7">A6</C>
                <C i="8">A7</C>
                <C i="9">A8</C>
                <C i="10">A9</C>
                <C i="11">A10</C>
                <C i="12">A11</C>
                <C i="13">A12</C>
                <C i="14">A13</C>
                <C i="15">A14</C>
                <C i="16">A15</C>
                <C i="17">A16</C>
                <C i="18">A17</C>
                <C i="19">A18</C>
                <C i="20">A19</C>
                <C i="21">A20</C>
                <C i="22">A21</C>
                <C i="23">A22</C>
                <C i="24">A23</C>
                <C i="25">A24</C>
                <C i="26">B1</C>
                <C i="27">B2</C>
                <C i="28">B3</C>
                <C i="29">B4</C>
                <C i="30">B5</C>
                <C i="31">B6</C>
                <C i="32">B7</C>
                <C i="33">B8</C>
                <C i="34">B9</C>
                <C i="35">B10</C>
                <C i="36">B11</C>
                <C i="37">B12</C>
                <C i="38">B13</C>
                <C i="39">B14</C>
                <C i="40">B15</C>
                <C i="41">B16</C>
                <C i="42">B17</C>
                <C i="43">B18</C>
                <C i="44">B19</C>
                <C i="45">B20</C>
                <C i="46">B21</C>
                <C i="47">B22</C>
                <C i="48">B23</C>
                <C i="49">B24</C>
                <C i="50">C1</C>
                <C i="51">C2</C>
                <C i="52">C3</C>
                <C i="53">C4</C>
                <C i="54">C5</C>
                <C i="55">C6</C>
                <C i="56">C7</C>
                <C i="57">C8</C>
                <C i="58">C9</C>
                <C i="59">C10</C>
                <C i="60">C11</C>
                <C i="61">C12</C>
                <C i="62">C13</C>
                <C i="63">C14</C>
                <C i="64">C15</C>
                <C i="65">C16</C>
                <C i="66">C17</C>
                <C i="67">C18</C>
                <C i="68">C19</C>
                <C i="69">C20</C>
                <C i="70">C21</C>
                <C i="71">C22</C>
                <C i="72">C23</C>
                <C i="73">C24</C>
                <C i="74">D1</C>
                <C i="75">D2</C>
                <C i="76">D3</C>
                <C i="77">D4</C>
                <C i="78">D5</C>
                <C i="79">D6</C>
                <C i="80">D7</C>
                <C i="81">D8</C>
                <C i="82">D9</C>
                <C i="83">D10</C>
                <C i="84">D11</C>
                <C i="85">D12</C>
                <C i="86">D13</C>
                <C i="87">D14</C>
                <C i="88">D15</C>
                <C i="89">D16</C>
                <C i="90">D17</C>
                <C i="91">D18</C>
                <C i="92">D19</C>
                <C i="93">D20</C>
                <C i="94">D21</C>
                <C i="95">D22</C>
                <C i="96">D23</C>
                <C i="97">D24</C>
                <C i="98">E1</C>
                <C i="99">E2</C>
                <C i="100">E3</C>
                <C i="101">E4</C>
                <C i="102">E5</C>
                <C i="103">E6</C>
                <C i="104">E7</C>
                <C i="105">E8</C>
                <C i="106">E9</C>
                <C i="107">E10</C>
                <C i="108">E11</C>
                <C i="109">E12</C>
                <C i="110">E13</C>
                <C i="111">E14</C>
                <C i="112">E15</C>
                <C i="113">E16</C>
                <C i="114">E17</C>
                <C i="115">E18</C>
                <C i="116">E19</C>
                <C i="117">E20</C>
                <C i="118">E21</C>
                <C i="119">E22</C>
                <C i="120">E23</C>
                <C i="121">E24</C>
                <C i="122">F1</C>
                <C i="123">F2</C>
                <C i="124">F3</C>
                <C i="125">F4</C>
                <C i="126">F5</C>
                <C i="127">F6</C>
                <C i="128">F7</C>
                <C i="129">F8</C>
                <C i="130">F9</C>
                <C i="131">F10</C>
                <C i="132">F11</C>
                <C i="133">F12</C>
                <C i="134">F13</C>
                <C i="135">F14</C>
                <C i="136">F15</C>
                <C i="137">F16</C>
                <C i="138">F17</C>
                <C i="139">F18</C>
                <C i="140">F19</C>
                <C i="141">F20</C>
                <C i="142">F21</C>
                <C i="143">F22</C>
                <C i="144">F23</C>
                <C i="145">F24</C>
                <C i="146">G1</C>
                <C i="147">G2</C>
                <C i="148">G3</C>
                <C i="149">G4</C>
                <C i="150">G5</C>
                <C i="151">G6</C>
                <C i="152">G7</C>
                <C i="153">G8</C>
                <C i="154">G9</C>
                <C i="155">G10</C>
                <C i="156">G11</C>
                <C i="157">G12</C>
                <C i="158">G13</C>
                <C i="159">G14</C>
                <C i="160">G15</C>
                <C i="161">G16</C>
                <C i="162">G17</C>
                <C i="163">G18</C>
                <C i="164">G19</C>
                <C i="165">G20</C>
                <C i="166">G21</C>
                <C i="167">G22</C>
                <C i="168">G23</C>
                <C i="169">G24</C>
                <C i="170">H1</C>
                <C i="171">H2</C>
                <C i="172">H3</C>
                <C i="173">H4</C>
                <C i="174">H5</C>
                <C i="175">H6</C>
                <C i="176">H7</C>
                <C i="177">H8</C>
                <C i="178">H9</C>
                <C i="179">H10</C>
                <C i="180">H11</C>
                <C i="181">H12</C>
                <C i="182">H13</C>
                <C i="183">H14</C>
                <C i="184">H15</C>
                <C i="185">H16</C>
                <C i="186">H17</C>
                <C i="187">H18</C>
                <C i="188">H19</C>
                <C i="189">H20</C>
                <C i="190">H21</C>
                <C i="191">H22</C>
                <C i="192">H23</C>
                <C i="193">H24</C>
                <C i="194">I1</C>
                <C i="195">I2</C>
                <C i="196">I3</C>
                <C i="197">I4</C>
                <C i="198">I5</C>
                <C i="199">I6</C>
                <C i="200">I7</C>
                <C i="201">I8</C>
                <C i="202">I9</C>
                <C i="203">I10</C>
                <C i="204">I11</C>
                <C i="205">I12</C>
                <C i="206">I13</C>
                <C i="207">I14</C>
                <C i="208">I15</C>
                <C i="209">I16</C>
                <C i="210">I17</C>
                <C i="211">I18</C>
                <C i="212">I19</C>
                <C i="213">I20</C>
                <C i="214">I21</C>
                <C i="215">I22</C>
                <C i="216">I23</C>
                <C i="217">I24</C>
                <C i="218">J1</C>
                <C i="219">J2</C>
                <C i="220">J3</C>
                <C i="221">J4</C>
                <C i="222">J5</C>
                <C i="223">J6</C>
                <C i="224">J7</C>
                <C i="225">J8</C>
                <C i="226">J9</C>
                <C i="227">J10</C>
                <C i="228">J11</C>
                <C i="229">J12</C>
                <C i="230">J13</C>
                <C i="231">J14</C>
                <C i="232">J15</C>
                <C i="233">J16</C>
                <C i="234">J17</C>
                <C i="235">J18</C>
                <C i="236">J19</C>
                <C i="237">J20</C>
                <C i="238">J21</C>
                <C i="239">J22</C>
                <C i="240">J23</C>
                <C i="241">J24</C>
                <C i="242">K1</C>
                <C i="243">K2</C>
                <C i="244">K3</C>
                <C i="245">K4</C>
                <C i="246">K5</C>
                <C i="247">K6</C>
                <C i="248">K7</C>
                <C i="249">K8</C>
                <C i="250">K9</C>
                <C i="251">K10</C>
                <C i="252">K11</C>
                <C i="253">K12</C>
                <C i="254">K13</C>
                <C i="255">K14</C>
                <C i="256">K15</C>
                <C i="257">K16</C>
                <C i="258">K17</C>
                <C i="259">K18</C>
                <C i="260">K19</C>
                <C i="261">K20</C>
                <C i="262">K21</C>
                <C i="263">K22</C>
                <C i="264">K23</C>
                <C i="265">K24</C>
                <C i="266">L1</C>
                <C i="267">L2</C>
                <C i="268">L3</C>
                <C i="269">L4</C>
                <C i="270">L5</C>
                <C i="271">L6</C>
                <C i="272">L7</C>
                <C i="273">L8</C>
                <C i="274">L9</C>
                <C i="275">L10</C>
                <C i="276">L11</C>
                <C i="277">L12</C>
                <C i="278">L13</C>
                <C i="279">L14</C>
                <C i="280">L15</C>
                <C i="281">L16</C>
                <C i="282">L17</C>
                <C i="283">L18</C>
                <C i="284">L19</C>
                <C i="285">L20</C>
                <C i="286">L21</C>
                <C i="287">L22</C>
                <C i="288">L23</C>
                <C i="289">L24</C>
                <C i="290">M1</C>
                <C i="291">M2</C>
                <C i="292">M3</C>
                <C i="293">M4</C>
                <C i="294">M5</C>
                <C i="295">M6</C>
                <C i="296">M7</C>
                <C i="297">M8</C>
                <C i="298">M9</C>
                <C i="299">M10</C>
                <C i="300">M11</C>
                <C i="301">M12</C>
                <C i="302">M13</C>
                <C i="303">M14</C>
                <C i="304">M15</C>
                <C i="305">M16</C>
                <C i="306">M17</C>
                <C i="307">M18</C>
                <C i="308">M19</C>
                <C i="309">M20</C>
                <C i="310">M21</C>
                <C i="311">M22</C>
                <C i="312">M23</C>
                <C i="313">M24</C>
                <C i="314">N1</C>
                <C i="315">N2</C>
                <C i="316">N3</C>
                <C i="317">N4</C>
                <C i="318">N5</C>
                <C i="319">N6</C>
                <C i="320">N7</C>
                <C i="321">N8</C>
                <C i="322">N9</C>
                <C i="323">N10</C>
                <C i="324">N11</C>
                <C i="325">N12</C>
                <C i="326">N13</C>
                <C i="327">N14</C>
                <C i="328">N15</C>
                <C i="329">N16</C>
                <C i="330">N17</C>
                <C i="331">N18</C>
                <C i="332">N19</C>
                <C i="333">N20</C>
                <C i="334">N21</C>
                <C i="335">N22</C>
                <C i="336">N23</C>
                <C i="337">N24</C>
                <C i="338">O1</C>
                <C i="339">O2</C>
                <C i="340">O3</C>
                <C i="341">O4</C>
                <C i="342">O5</C>
                <C i="343">O6</C>
                <C i="344">O7</C>
                <C i="345">O8</C>
                <C i="346">O9</C>
                <C i="347">O10</C>
                <C i="348">O11</C>
                <C i="349">O12</C>
                <C i="350">O13</C>
                <C i="351">O14</C>
                <C i="352">O15</C>
                <C i="353">O16</C>
                <C i="354">O17</C>
                <C i="355">O18</C>
                <C i="356">O19</C>
                <C i="357">O20</C>
                <C i="358">O21</C>
                <C i="359">O22</C>
                <C i="360">O23</C>
                <C i="361">O24</C>
                <C i="362">P1</C>
                <C i="363">P2</C>
                <C i="364">P3</C>
                <C i="365">P4</C>
                <C i="366">P5</C>
                <C i="367">P6</C>
                <C i="368">P7</C>
                <C i="369">P8</C>
                <C i="370">P9</C>
                <C i="371">P10</C>
                <C i="372">P11</C>
                <C i="373">P12</C>
                <C i="374">P13</C>
                <C i="375">P14</C>
                <C i="376">P15</C>
                <C i="377">P16</C>
                <C i="378">P17</C>
                <C i="379">P18</C>
                <C i="380">P19</C>
                <C i="381">P20</C>
                <C i="382">P21</C>
                <C i="383">P22</C>
                <C i="384">P23</C>
                <C i="385">P24</C>
                <C i="386"/>
            </R>
        </Data>
    </Data>
    <Attachments>
        <Attachment Encoding="base64" Location="element" Name="labcorp.txt"/>
    </Attachments>
</Message>

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet exclude-result-prefixes="t saxon" version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:t="http://softcomputer.com/SoftGene/DI" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:saxon="http://saxon.sf.net/" extension-element-prefixes="saxon">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" exclude-result-prefixes="#all"/>
    <t:trn>
        <misctables saName="PLATEMAP">
            <table name="PLATEMAP" forcesynch="false" hidden="false" deprecated="false">
                <header>
                    <col id="_96PLATE" caption="96 Plate" unique="false" deprecated="false" grouping="false"/>
                    <col id="_384PLATE" caption="384 Plate" unique="false" deprecated="false" grouping="false"/>
                    <col id="TYPE" caption="Sample Type" unique="false" deprecated="false" grouping="false"/>
                </header>
                <row>
                    <col id="_96PLATE">A01</col>
                    <col id="_384PLATE">A1,A2,B1</col>
                    <col id="TYPE">PATIENT</col>
                </row>
                <row>
                    <col id="_96PLATE">B01</col>
                    <col id="_384PLATE">C1,C2,D2</col>
                    <col id="TYPE">PATIENT</col>
                </row>
                <row>
                    <col id="_96PLATE">C01</col>
                    <col id="_384PLATE">E1,E2,F1</col>
                    <col id="TYPE">PATIENT</col>
                </row>
                <row>
                    <col id="_96PLATE">A11</col>
                    <col id="_384PLATE">A21,A22,B21</col>
                    <col id="TYPE">PATIENT</col>
                </row>
                <row>
                    <col id="_96PLATE">CRTLA</col>
                    <col id="_384PLATE">A22,A24</col>
                    <col id="TYPE">CONTROL</col>
                </row>
                <row>
                    <col id="_96PLATE">CRTLB</col>
                    <col id="_384PLATE">D22,D24</col>
                    <col id="TYPE">CONTROL</col>
                </row>
                <row>
                    <col id="_96PLATE">CRTLC</col>
                    <col id="_384PLATE">F22,F24</col>
                    <col id="TYPE">CONTROL</col>
                </row>
                <row>
                    <col id="_96PLATE">CRTLD</col>
                    <col id="_384PLATE">H22,H24</col>
                    <col id="TYPE">CONTROL</col>
                </row>
                <row>
                    <col id="_96PLATE">CRTLE</col>
                    <col id="_384PLATE">J22,J24</col>
                    <col id="TYPE">CONTROL</col>
                </row>
                <row>
                    <col id="_96PLATE">CRTLF</col>
                    <col id="_384PLATE">L22,L24</col>
                    <col id="TYPE">CONTROL</col>
                </row>
                <row>
                    <col id="_96PLATE">CRTLG</col>
                    <col id="_384PLATE">N22,N24</col>
                    <col id="TYPE">CONTROL</col>
                </row>
                <row>
                    <col id="_96PLATE">CRTLH</col>
                    <col id="_384PLATE">P22,P24</col>
                    <col id="TYPE">CONTROL</col>
                </row>
            </table>
            <outer-class>
                <FORMATS>FORMATS</FORMATS>
            </outer-class>
        </misctables>
    </t:trn>
    <xsl:variable name="miscTables" select="document('')//t:trn/misctables"/>
    <xsl:variable name="PLATEMAP" select="$miscTables/table[@name = 'PLATEMAP']"/>
    <xsl:template match="/Message">
        <PLATEMAP>
            <xsl:apply-templates select="Data/Data"/>
        </PLATEMAP>
    </xsl:template>
    <xsl:template match="Data">
        <xsl:variable name="map" select="R[@i = 2]"/>
        <xsl:variable name="map" select="R[@i = 2]"/>
        <xsl:for-each select="$miscTables/table/row">
            <sample>
                <xsl:attribute name="input_pos" select="col[@id = '_96PLATE']"/>
                <xsl:variable name="plate384" select="tokenize(col[@id = '_384PLATE'], ',')"/>
                <xsl:for-each select="$plate384">
                    <xsl:variable name="currentWell" select="."/>
                    <Rec>
                        <xsl:value-of select="$map[C = $currentWell]/@i"/>
                    </Rec>
                </xsl:for-each>
            </sample>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

问题是您没有在地图中选择 C 节点,因此如果您更改此行:

<xsl:value-of select="$map[C = $currentWell]/@i"/>

要:

<xsl:value-of select="$map/C[. = $currentWell]/@i"/>

您将获得预期的结果。