gpt4 book ai didi

c - 使用 C 中的 libxml2 库更新 kml 文件的内容

转载 作者:太空宇宙 更新时间:2023-11-04 04:22:41 25 4
gpt4 key购买 nike

我正在尝试使用 C 使用 libxml2 头文件提取特定数据集。除了节点内容的更改外,其他所有部分都在工作。这是非常重要的,因为我不希望程序读取同一组数据点。该程序运行无误,但内容不会改变。

部分代码如下:

int parseName (xmlDocPtr doc,xmlNodePtr cur) {
xmlChar *key;
cur = cur->xmlChildrenNode;
while (cur != NULL) {
if ((!xmlStrcmp(cur->name, (const xmlChar *)"Placemark"))) {
cur = cur ->xmlChildrenNode;
while(cur != NULL){
if((!xmlStrcmp(cur->name, (const xmlChar *)"name"))) {
key = xmlNodeListGetString(doc,cur->xmlChildrenNode,1);
if((!xmlStrcmp(key,(const xmlChar *)"Untitled Polygon"))){
xmlNodeSetContent(cur->content,(const xmlChar *)"Done");
return 1;
}
else if((!xmlStrcmp(key,(const xmlChar *)"Out")))
return -1;

}
cur=cur->next;
}

}
cur=cur->next;
}
return 0;
}

这里 xmlNodeSetContent 不起作用。但是函数仍然返回 1。

编辑:kml 文件是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
<Placemark>
<name>Untitled Polygon</name>
<styleUrl>#m_ylw-pushpin</styleUrl>
<Polygon>
<tessellate>1</tessellate>
<outerBoundaryIs>
<LinearRing>
<coordinates>
77.58482071603055,12.86858949944241,0 77.60057575684357,12.86642619038822,0 77.60374633781389,12.88004602175216,0 77.5844101227442,12.88296731261186,0 77.58482071603055,12.86858949944241,0
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</kml>

我可以成功提取坐标,但无法将名称更改为其他名称。它只是坚持“无标题多边形”。

更新答案:更改了一行,xmlNodeSetContent(cur->xmlChildrenNode,(const xmlChar *)"Done"); 再添加一行以保存对内容所做的更改文件:xmlSaveFormatFile ("NOW1.kml", doc, 0);谢谢。

最佳答案

cur 的内容成员未被使用,这就是为什么在设置它时看不到效果的原因。像 cur 这样的元素节点从不使用它们的“content”成员,而是使用具有内容的“text”类型的子节点。

请注意,在查找 "Untitled Polygon" 时, 你正在使用 xmlNodeListGetStringcur->xmlChildrenNode , 不在 cur本身。那个 xmlChildrenNode 是文本节点。

它是这样设计的,所以如果你遇到类似 <name>Untitled <b>Poly</b>gon</name> 的情况,您会看到 2 个子文本节点(包含 Untitledgon 的内容),以及 <b>它们之间的元素节点,它本身有一个文本节点子节点(内容为 Poly )。

使用 xmlNodeSetContentcur->xmlChildrenNode你应该会看到结果。

关于c - 使用 C 中的 libxml2 库更新 kml 文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44897808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com