在XSL上解析具有相同名称的子元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在XSL上解析具有相同名称的子元素相关的知识,希望对你有一定的参考价值。
我想知道是否有一种方法可以使用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)。
如何区分纬度和经度?
答案
不是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)
对。
另一答案
只需使用索引:
<xsl:value-of select="location/coordinates[1]"/>
<xsl:value-of select="location/coordinates[2]"/>
另一答案
既然你已将其标记为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
)。
另一答案
只需添加另一级循环,例如:
<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>
请注意,如果它比这更复杂,那么您应该考虑使用模板规则。
以上是关于在XSL上解析具有相同名称的子元素的主要内容,如果未能解决你的问题,请参考以下文章
使用 SAX 解析器,如何解析具有相同名称标签但元素不同的 xml 文件?