XSLT Как вызвать XML элемент без партаметра идентификатора? - PullRequest
0 голосов
/ 05 августа 2020

Мне нужно создать таблицу HTML, используя файл данных XML и таблицу стилей XSLT с инструкцией <<code>xsl:for-each>. Я должен использовать имена элементов, включенных в файл XML.

Мои данные организованы в один файл XML двумя способами. Структура следующая:

<Data>
   <FieldBook> (...) </FieldBook>
   <Reductions>  (...) </Reductions>
</Data>

<FieldBook>
<PointRecord ID="00000017" TimeStamp="2020-08-04T14:42:41">
            <Name>osn2t</Name>
            <Code></Code>
            <Description1 Name="Description">k</Description1>
            <Method>GpsStaticObservation</Method>
            <SurveyMethod>NetworkFix</SurveyMethod>
            <Classification>Stakeout</Classification>
            <Deleted>false</Deleted>
            <ECEFDeltas>
                <DeltaX>-23.63342856942</DeltaX>
                <DeltaY>-3.16591248824</DeltaY>
                <DeltaZ>10.47772248089</DeltaZ>
            </ECEFDeltas>
            <Precision>
                <Horizontal>0.01284883061</Horizontal>
                <Vertical>0.01942246037</Vertical>
            </Precision>
            <QualityControl1>
                <NumberOfSatellites>12</NumberOfSatellites>
                <RelativeDOPs>false</RelativeDOPs>
                <PDOP>1.20000000000</PDOP>
                <HDOP>0.70000000000</HDOP>
                <VDOP>1.00000000000</VDOP>
                <RMS>57.01754385965</RMS>
                <NumberOfPositionsUsed>7</NumberOfPositionsUsed>
                <HorizontalStandardDeviation></HorizontalStandardDeviation>
                <VerticalStandardDeviation></VerticalStandardDeviation>
                <StartTime>
                    <GPSWeek>2117</GPSWeek>
                    <Seconds>218550.0000</Seconds>
                </StartTime>
                <EndTime>
                    <GPSWeek>2117</GPSWeek>
                    <Seconds>218575.0000</Seconds>
                </EndTime>
                <MonitorStatus>NotMonitored</MonitorStatus>
            </QualityControl1>
            <QualityControl2>
                <NumberOfSatellites>12</NumberOfSatellites>
                <ErrorScale>0.010833333</ErrorScale>
                <VCVxx>0.00003600000</VCVxx>
                <VCVxy>0.00000339435</VCVxy>
                <VCVxz>0.00002158332</VCVxz>
                <VCVyy>0.00000900000</VCVyy>
                <VCVyz>0.00000853788</VCVyz>
                <VCVzz>0.00010000000</VCVzz>
                <UnitVariance>0.0</UnitVariance>
            </QualityControl2>
            <AntennaID>00000015</AntennaID>
            <RTK_Base>VRS1</RTK_Base>
            <ComputedGrid>
                <North>5544447.5666</North>
                <East>7424116.2708</East>
                <Elevation>213.2381</Elevation>
            </ComputedGrid>
            <Stakeout>
                <PointDesign>
                    <Name>osn2</Name>
                    <Code></Code>
                    <StakeoutMethod>ToThePoint</StakeoutMethod>
                    <DesignElevation>213.2180</DesignElevation>
                </PointDesign>
                <GridDeltas>
                    <DeltaNorth>0.0104</DeltaNorth>
                    <DeltaEast>0.0132</DeltaEast>
                    <DeltaElevation>-0.0201</DeltaElevation>
                </GridDeltas>
            </Stakeout>
        </PointRecord>
...
</FieldBook>

и

<Reductions>
        <Point>
            <ID>00000017</ID>
            <Name>osn2t</Name>
            <Code></Code>
            <Description1 Name="Description">k</Description1>
            <SurveyMethod>NetworkFix</SurveyMethod>
            <Classification>Stakeout</Classification>
            <Grid>
                <North>5544447.5666</North>
                <East>7424116.2708</East>
                <Elevation>213.2381</Elevation>
            </Grid>
            <WGS84>
                <Latitude>50.03137528405</Latitude>
                <Longitude>19.94080538786</Longitude>
                <Height>253.0977</Height>
            </WGS84>
        </Point>
</Reductions>

Я получаю необходимые данные из одной части дерева XML (FieldBook), используя такой код для NumberOfSatellites, но я не знаю, как это получить, например. для второго поля из пунктов «Скидки»:

<xsl:template match="PointRecord">
  <xsl:for-each select="/Data/FieldBook/PointRecord[Deleted!='true']"></xsl:for-each>
    <xsl:if test="ECEFDeltas/DeltaX/text()">
      <tr>
        (...)
        <td>
          <xsl:call-template name="my-out">
            <xsl:with-param name="Val" select="QualityControl1/NumberOfSatellites"/>
          </xsl:call-template>
        </td>
          (...)
        <td>
          <xsl:call-template name="my-format">
            <xsl:with-param name="Val" select=" >>> data from <Reductions item> <<<"/>
            <xsl:with-param name="format" select="$DecPl2"/>
          </xsl:call-template>
        </td>

      </tr>
    </xsl:if>
  1. Как я могу позвонить, например. Точка / Сетка / Север значение элемента из Уменьшение с использованием параметра ID PointRecord из FieldBook ?

  2. Как я могу вызвать PointRecord элемент из FieldBook , используя Point / ID значение элемента из сокращение ?

1 Ответ

1 голос
/ 05 августа 2020

Я думаю, вы хотите использовать ключ; объявить

<xsl:key name="red-ref" match="Reductions/Point" use="ID"/>

как элемент верхнего уровня (т.е. дочерний элемент xsl:stylesheet или xsl:transform). Затем в любом контексте, в котором вы обрабатываете элемент PointRecord, вы можете использовать key('red-ref', @ID), чтобы найти указанный Point, т.е. key('red-ref', @ID)/Grid/North предоставит вам этот элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...