xml - XSLT 如何调用没有 ID 参数的 XML 项目?
问题描述
xsl:for-each
我必须使用 XML 数据文件和带有 < > 指令的 XSLT 样式表来创建 HTML 表。我应该使用包含在 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>
我使用 NumberOfSatellites 的此类代码从 XML 树(FieldBook)的一部分获取必要的数据,但我不知道如何获取它,例如。对于第二个字段,来自 Reductions 项目:
<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>
我怎么能打电话给例如。使用FieldBook中PointRecord的 ID 参数从Reductions中获取点/网格/北项值?
如何使用Reductions中的Point/ID项目值从FieldBook调用PointRecord项目?
解决方案
我认为您想使用密钥;宣布
<xsl:key name="red-ref" match="Reductions/Point" use="ID"/>
作为顶级元素(即xsl:stylesheet
or的子元素xsl:transform
)。然后,在任何情况下,您都可以处理PointRecord
可以key('red-ref', @ID)
用来查找引用的元素Point
,即key('red-ref', @ID)/Grid/North
会给您该元素。
推荐阅读
- android - Android KEYCODE_DEL 未按预期为硬件键盘触发
- php - 在php中使用foreach求和值
- perl - 以这种方式使用“can”功能是什么意思?
- java - JAXB 和 Java 11 模块信息.java
- r - 交互式图表中的订单条
- android - 错误:程序类型已存在:com.getcapacitor.AndroidProtocolHandler
- list - 如何强制列表通过另一个视图的切换按钮重绘?
- magento2 - Magento 2.3 - CentOS 7 - page_cache 不可写
- flutter - 如何使用颜色选择器将焦点移出表单中的文本字段
- r - 在箱线图中订购 ggplot