在XSL上解析具有相同名称的子元素

问题描述 投票:1回答:4

我想知道是否有一种方法可以使用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)。

如何区分纬度和经度?

python json xml xslt
4个回答
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]

如果你有更多的对,你可以使用odd和even来分隔它们。或者使用2阶段过程,首先选择location,它将返回位置标签,然后为每个返回一个(x,y)对。


0
投票

只需使用索引:

<xsl:value-of select="location/coordinates[1]"/>
<xsl:value-of select="location/coordinates[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文档中只会出现一次datalocation)。


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>

请注意,如果它比这更复杂,那么您应该考虑使用模板规则。

© www.soinside.com 2019 - 2024. All rights reserved.