XSL-使用select

时间:2019-07-10 06:09:05

标签: xml xslt

我是XSL / XML的新手,我查找了一些与标题相似的答案,但无法解决问题。我使用软件读取PDF文件并生成包含所需数据的XML。然后,我使用XSL构造XML以适合另一种系统的XML数据格式,该系统将提取的数据添加到数据库中。

我的XML(与该问题有关的部分)

    <LineItemRow ID="6" FromPage="2">
          <Fields>
            <Field ID="123a66a4876d4f53bf87ac95dd623c67" Type="Text" Status="Complete" Label="Heat (M)">
              <Value>40331</Value>
              <OcrExtractedValue T="40331 HEB100 FL L P 410 529 29" X="224" Y="997" H="15" W="850" L="27" C="100">
                <Keyword T="40331 " X="224" Y="997" H="15" W="70" L="27" C="100" />
              </OcrExtractedValue>
            </Field>
            <Field ID="8ff4d8bbde2b45039766a58952a040ae" Type="Text" Status="Complete" Label="Ort">
              <Value>FL</Value>
              <OcrExtractedValue T="40331 HEB100 FL L P 410 529 29" X="224" Y="997" H="15" W="850" L="27" C="100">
                <Keyword T="FL " X="636" Y="998" H="14" W="27" L="27" C="100" />
              </OcrExtractedValue>
            </Field>
            <Field ID="1fd972224fd64c3aad82812a3a951ced" Type="Text" Status="Complete" Label="Tensile - ReH">
              <Value>410</Value>
              <OcrExtractedValue T="40331 HEB100 FL L P 410 529 29" X="224" Y="997" H="15" W="850" L="27" C="100">
                <Keyword T="410 529 29 " X="824" Y="997" H="15" W="105" L="27" C="100" />
              </OcrExtractedValue>
            </Field>
            <Field ID="485dc23c9f35440e8d4683012b0d6b14" Type="Text" Status="Complete" Label="Tensile - Rm">
              <Value>529</Value>
            </Field>
            <Field ID="35c9bfa296e747d3b1249cd1a4804483" Type="Text" Status="Complete" Label="Tensile - A5">
              <Value>29</Value>
            </Field>
            <Field ID="23ffc002c972482284eb9c748e02dfe0" Type="Text" Status="Complete" Label="Impact - Temp">
              <Value>-</Value>
            </Field>
            <Field ID="bc4ab2575d0548c18fd0bd7ff41d0839" Type="Text" Status="Complete" Label="Impact - 1">
              <Value>-</Value>
            </Field>
            <Field ID="8219c9f6f2f248f6872f49497a3b5c1f" Type="Text" Status="Complete" Label="Impact - 2">
              <Value>-</Value>
            </Field>
            <Field ID="f6124a3e10c347fda48f8d39f7ee55cf" Type="Text" Status="Complete" Label="Impact - 3">
              <Value>-</Value>
            </Field>
            <Field ID="4a3493709a674350b22ec4bb2699a8b1" Type="Text" Status="Complete" Label="Impact - MW">
              <Value>-</Value>
            </Field>
          </Fields>
        </LineItemRow>

我的问题是我想检查select中的3个参数对我不起作用,我尝试使用|也不起作用,带有|的代码如下

<xsl:for-each select="$container/BaseTypeObject/Metadata/LineItemRows/LineItemRow[Fields/Field[@Label = 'Heat (M)']]">
                <TestDataSet Type="3">
                    <xsl:attribute name="HeatID" select="Fields/Field[@Label = 'Heat (M)']/Value"/>
                    <xsl:for-each select="Fields/Field[@Label != 'Heat (M)'] | Fields/Field[@Label != 'Ort'] | Fields/Field[@Value != '-']">
                        <TestDataValue>
                            <xsl:attribute name="Qualifier" select="@Label"/>
                            <xsl:choose>
                                <xsl:when test="@Label = 'Tensile - Re'">
                                    <xsl:attribute name="Unit" select="'N/mm²'"/>
                                </xsl:when>
                                <xsl:when test="@Label = 'Tensile - Rm'">
                                    <xsl:attribute name="Unit" select="'N/mm²'"/>
                                </xsl:when>
                                <xsl:when test="@Label = 'Tensile - A5.65'">
                                    <xsl:attribute name="Unit" select="'%'"/>
                                </xsl:when>                             
                                <xsl:when test="@Label = 'Impact - Value 1'">
                                    <xsl:attribute name="Unit" select="'°C'"/>
                                </xsl:when>
                                <xsl:when test="@Label = 'Impact - Value 2'">
                                    <xsl:attribute name="Unit" select="'J'"/>
                                </xsl:when>
                                <xsl:when test="@Label = 'Impact - Value 3'">
                                    <xsl:attribute name="Unit" select="'J'"/>
                                </xsl:when>
                                <xsl:when test="@Label = 'Impact - Temp'">
                                    <xsl:attribute name="Unit" select="'°C'"/>
                                </xsl:when>
                            </xsl:choose>
                            <xsl:attribute name="PageNo">
                                <xsl:call-template name="GetPageNo">
                                    <xsl:with-param name="container" select="$container"/>
                                    <xsl:with-param name="lineitemrow" select="../.."/>
                                </xsl:call-template>
                            </xsl:attribute>
                            <!--<xsl:choose>
                                <xsl:when test="@Label = 'Hardness' and contains(Value,'-')">
                                    <xsl:variable name="min" select="number(substring-before(Value,'-'))"/>
                                    <xsl:variable name="max" select="number(substring-after(Value,'-'))"/>
                                    <xsl:value-of select="xs:decimal($min + (($max - $min) div 2))"/>
                                </xsl:when>
                                <xsl:otherwise>
                                    <xsl:value-of select="xs:decimal(translate(Value,',','.'))"/>
                                </xsl:otherwise>
                            </xsl:choose>-->
                        </TestDataValue>
                    </xsl:for-each>

输出,

        <TestDataSet Type="3" HeatID="40331">
            <TestDataValue Qualifier="Heat (M)" PageNo="2"/>
            <TestDataValue Qualifier="Ort" PageNo="2"/>
            <TestDataValue Qualifier="Tensile - ReH" PageNo="2"/>
            <TestDataValue Qualifier="Tensile - Rm" Unit="N/mm²" PageNo="2"/>
            <TestDataValue Qualifier="Tensile - A5" PageNo="2"/>
            <TestDataValue Qualifier="Impact - Temp" Unit="°C" PageNo="2"/>
            <TestDataValue Qualifier="Impact - 1" PageNo="2"/>
            <TestDataValue Qualifier="Impact - 2" PageNo="2"/>
            <TestDataValue Qualifier="Impact - 3" PageNo="2"/>
            <TestDataValue Qualifier="Impact - MW" PageNo="2"/>
        </TestDataSet>

如您所见,我想跳过标签Heat(M),而Ort也想跳过-的值,但是输出不是我想要的,它不会跳过不需要的一次。 / p>

然后,我阅读了更多内容,发现使用not()比使用!=更好,因此我更改了<xsl:for-each select="Fields/Field[@Label != 'Heat (M)'] | Fields/Field[@Label != 'Ort'] | Fields/Field[@Value != '-']">

<xsl:for-each select="not(Fields/Field[@Label = 'Heat (M)'] | Fields/Field[@Label = 'Ort'] | Fields/Field[@Value = '-'])">给了我一个Unexpected 'atomic' item错误。

我希望我的问题很清楚,并且真的希望有人可以帮助我解决这个问题。

0 个答案:

没有答案