Я новичок в XSL / XML, я посмотрел некоторые ответы, похожие на мой заголовок, но не смог решить мою проблему.Я использую программное обеспечение для чтения файлов PDF и создания XML с необходимыми данными.Затем я использую XSL для структурирования 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>
Моя проблема в том, что я хочу проверить 3 аргумента в select
, который не работает для меня. Я попытался использовать |
, который также не работал, код с |
приведен ниже.
<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>
Out put,
<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 также хотел пропустить значения, которые -
, но out не был тем, что яхотел, он не пропускает нежелательные один раз.
Затем я прочитал немного больше, чтобы найти, что лучше использовать not()
, чем !=
, поэтому я изменил, <xsl:for-each select="Fields/Field[@Label != 'Heat (M)'] | Fields/Field[@Label != 'Ort'] | Fields/Field[@Value != '-']">
to
<xsl:for-each select="not(Fields/Field[@Label = 'Heat (M)'] | Fields/Field[@Label = 'Ort'] | Fields/Field[@Value = '-'])">
, что дало мне ошибку Unexpected 'atomic' item
.
Я надеюсь, что мой вопрос достаточно ясен, и очень надеюсь, что кто-то может помочь мне решить эту проблему.