我正在尝试解析看起来像这样的xml Feed:
<item>
<title>item title</title>
<link>item link</link>
<description>item description</description>
</item>
我正在尝试找到一个xpath表达式,它将检索每个项目的所有详细信息,以便Feed中的每个项目都包含在自己的数组中或以某种方式分组。我尝试使用//item/*
,但标签没有分组,尽管它们的排序正确。
有没有这样做?
编辑:
[
[title1, link1, desc1],
[title2, link2, desc2],
[title3, link3, desc3]
]
答案 0 :(得分:0)
使用此输入
<root>
<item>
<title>item title</title>
<link>item link</link>
<description>item description</description>
</item>
<item>
<title>item2</title>
<link>link2</link>
<description>description2</description>
</item>
</root>
这个xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="//item">
<xsl:value-of select="./title"/><xsl:text>
</xsl:text>
<xsl:value-of select="./link"/><xsl:text>
</xsl:text>
<xsl:value-of select="./description"/><xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
你得到这个输出
item title
item link
item description
item2
link2
description2
我希望这有帮助..
答案 1 :(得分:0)
来自http://www.w3.org/TR/xpath/#section-Introduction
评估表达式以产生一个 对象,具有以下之一 四种基本类型:
- node-set(没有重复的无序节点集合)
- 布尔值(true或false)
- 数字(浮点数)
- string(一系列UCS字符)
所以,没有像元组那样的“结构”数据类型。您的任务的“标准”解决方案是选择父项并迭代它们以使用任何DOM API方法获取子项。
答案 2 :(得分:0)
这是一个返回序列的 XPath 2.0 表达式(假设来自Stefanos答案的XML输入文档):
for $item in /root/item
return ($item/title/text(), $item/link/text(), $item/description/text())
序列是有序但不允许嵌套,因此您无法准确获得纯XPath要求的数据结构。使用XSLT(或其他主机语言),您可以创建提供所需结构的新对象。
答案 3 :(得分:0)
您尚未指定语言,但如果您使用的是Python(这就是您所呈现的数据结构),那么使用lxml
就足够了:
>>> from lxml import etree
>>> d = etree.fromstring("""<doc>
<item>
<title>item 1 title</title>
<link>item 1 link</link>
<description>item 1 description</description>
</item>
<item>
<title>item 2 title</title>
<link>item 2 link</link>
<description>item 2 description</description>
</item>
</doc>""")
>>> [[e.xpath("title")[0].text,
e.xpath("description")[0].text,
e.xpath("link")[0].text]
for e in d.xpath("/doc/item")]
[['item 1 title', 'item 1 description', 'item 1 link'], ['item 2 title', 'item 2 description', 'item 2 link']]
如果XML的结构不可靠,那么在列表解析中这不容易做到;例如,如果item
元素没有“链接”子元素,则会出现上述情况。