我想知道是否有一种方法可以使用XSL在其所有具有相同元素名称的子元素上转移一个父元素。
例如:
这是我的XML代码
<all>
<data>
<location>
<coordinates>-80.326897</coordinates>
<coordinates>25.586399</coordinates>
</location>
</data>
<status>success</status>
</all>
我正在解析它,
<xsl:for-each select="/all/data">
<xsl:value-of select="location/coordinates"/></b></center></td>
<xsl:value-of select="location/coordinates"/></b></center></td>
很显然,我想同时获得纬度和经度的值,但是,当然,我对这两者都获得了相同的值(-80.32)。
如何区分纬度和经度?
答案 0 :(得分:0)
不是XSL
,而是因为您标记了python
,因此建议您使用BeautifulSoup
from bs4 import BeautifulSoup
c = """
<all>
<data>
<location>
<coordinates>-80.326897</coordinates>
<coordinates>25.586399</coordinates>
</location>
</data>
<status>success</status>
</all>
"""
soup = BeautifulSoup(c, 'lxml')
selection = soup.select('location coordinates')
selection = [float(e.text) for e in selection]
>>> selection
[-80.326897, 25.586399]
如果您有更多对,则可以使用奇数和偶数来分隔它们。或使用两个阶段的过程,首先选择location
,这将返回位置标签,然后为每个标签返回一对(x,y)
。
答案 1 :(得分:0)
只需使用索引:
<xsl:value-of select="location/coordinates[1]"/>
<xsl:value-of select="location/coordinates[2]"/>
答案 2 :(得分:0)
由于您已将其标记为python
,所以我想您正在使用libxslt
,即XSLT 1.0。在XSLT 1.0中,指令:
<xsl:value-of select="location/coordinates"/>
从第一个coordinates
中的第一个 location
获取值。
要从第二个coordinates
获取值,您可以 使用:
<xsl:value-of select="location/coordinates[2]"/>
或只需更改您的:
<xsl:for-each select="/all/data">
收件人:
<xsl:for-each select="/all/data/location/coordinates">
(这是假设XML文档中data
和location
都只会出现一次。)
答案 3 :(得分:0)
只需添加另一个循环级别,例如:
<xsl:for-each select="/all/data">
<div>
<xsl:for-each select="location/coordinates">
<b><xsl:value-of select="."/></b>
</xsl:for-each>
</div>
</xsl:for-each>
请注意,如果它变得比这更复杂,那么您应该考虑使用模板规则。