我如何使用 libxml2 访问 <node > 中的 <tag key = ... value = .../>?
how can i access to <tag key = ... value = .../> which is IN a <node > using libxml2?
我正在尝试使用 libxml2 解析 OSM 文件。
这是 osm 文件的一部分:
<node id="368138" lat="48.8546445" lon="2.3627305" user="Pieren"
uid="17286" visible="true" version="3" changeset="4490579"
timestamp="2010-04-21T20:34:49Z">
<tag k="highway" v="traffic_signals"/>
</node>
我需要获取标签的键和值。但我不知道如何。我尝试使用
访问
xmlHasProp(node,(const xmlChar*)"tag")
但我认为标签不被视为 node
的道具。
我不熟悉 libxml2,但根据文档 xmlHasProp()
搜索 XML 属性 。在OSM XML中,节点有各种属性,如lat、lon等。但是,标签并未建模为属性,而是子元素。要访问标签,您必须遍历节点的 children。
最直接的选择是从根节点走到您要查找的后代节点。 XML 文档或元素的子节点可以通过 children
和 next
指针作为链表访问。例如,假设 node
是一个 OSM node
元素:
for (xmlNode *cur = node->children; cur; cur = cur->next) {
if (cur->type == XML_ELEMENT_NODE
&& xmlStrcmp(cur->name, BAD_CAST "tag") == 0) {
/* Found "tag" element. */
}
}
另一种选择是使用 libxml2 的 XPath 引擎。它允许您使用 XPath 表达式枚举节点。
查看 libxml2 网站上的 examples。
我正在尝试使用 libxml2 解析 OSM 文件。 这是 osm 文件的一部分:
<node id="368138" lat="48.8546445" lon="2.3627305" user="Pieren"
uid="17286" visible="true" version="3" changeset="4490579"
timestamp="2010-04-21T20:34:49Z">
<tag k="highway" v="traffic_signals"/>
</node>
我需要获取标签的键和值。但我不知道如何。我尝试使用
访问xmlHasProp(node,(const xmlChar*)"tag")
但我认为标签不被视为 node
的道具。
我不熟悉 libxml2,但根据文档 xmlHasProp()
搜索 XML 属性 。在OSM XML中,节点有各种属性,如lat、lon等。但是,标签并未建模为属性,而是子元素。要访问标签,您必须遍历节点的 children。
最直接的选择是从根节点走到您要查找的后代节点。 XML 文档或元素的子节点可以通过 children
和 next
指针作为链表访问。例如,假设 node
是一个 OSM node
元素:
for (xmlNode *cur = node->children; cur; cur = cur->next) {
if (cur->type == XML_ELEMENT_NODE
&& xmlStrcmp(cur->name, BAD_CAST "tag") == 0) {
/* Found "tag" element. */
}
}
另一种选择是使用 libxml2 的 XPath 引擎。它允许您使用 XPath 表达式枚举节点。
查看 libxml2 网站上的 examples。