【发布时间】:2011-08-09 23:59:39
【问题描述】:
我的目标是在一个简单的站点地图 xml 文档中简单地更新“lastmod”节点:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/</loc>
<lastmod>2005-01-01</lastmod>
</url>
</urlset>
我想将此作为部署 ant 脚本的一部分,因此我使用 Ant 任务 XMLTask。这是我的蚂蚁目标:
<target name="update-sitemap" description="update the update date">
<xmltask source="war/sitemap.xml" dest="war/newsitemap.xml" report="true">
<replace path="/urlset/url/lastmod/text()" withText="new text"/>
</xmltask>
</target>
不幸的是,我的 xpath 无法匹配任何内容:
[xmltask] TextAction(new text) (/urlset/url/lastmod/text()) failed to match
我还尝试了以下 xpath 查询,但没有成功:
//lastmod/text()
/urlset[@*]/url/lastmod/text()
/urlset[@xmlns]/url/lastmod/text()
然而,我发现如果我从源文件中的 urlset 节点手动删除命名空间属性,一切正常。 这是 XMLTask 中的错误还是我做错了什么?
【问题讨论】:
-
通常需要注册命名空间。该方法取决于您的 XPath 引擎。在这种情况下(一种 XML 语法),我希望在 Ant 文档中声明一个命名空间就足够了。
标签: xml ant xpath xml-namespaces