首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xpath设置节点的文本值

使用xpath设置节点的文本值
EN

Stack Overflow用户
提问于 2012-04-09 16:31:04
回答 2查看 8.6K关注 0票数 4

示例XML:

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

我在shell上使用xpath尝试更改xml节点的文本值。我想把哈利波特改成索恩斯的游戏。

代码语言:javascript
复制
xpath test.xml "//bookstore/book/title/text()" 2>/dev/null

会把哈利波特传到我的终端机。现在可以使用xpath将节点的值从Harry Potter更改为Game of Thornes吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-09 18:14:15

XPath本身不能用于修改文档。但是xmlstarlet命令行实用程序可以做到这一点。示例:

代码语言:javascript
复制
xml ed -u "//book[1]/title" -v "Game of Thrones" bookstore.xml

输出:

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
  <book>
    <title lang="eng">Game of Thrones</title>
    <price>29.99</price>
  </book>
  <book>
    <title lang="eng">Learning XML</title>
    <price>39.95</price>
  </book>
</bookstore>

注意:如果表达式中没有[1],结果将是:

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
  <book>
    <title lang="eng">Game of Thrones</title>
    <price>29.99</price>
  </book>
  <book>
    <title lang="eng">Game of Thrones</title>
    <price>39.95</price>
  </book>
</bookstore>

上面的命令将结果输出到stdout。有一个选项(-L--inplace)可以就地修改文档:

代码语言:javascript
复制
xml ed -L -u "//book[1]/title" -v "Game of Thrones" bookstore.xml 

此选项在xmlstarlet 1.3.1的文档中未提及,但在执行时会显示该选项

代码语言:javascript
复制
xml ed --help
票数 8
EN

Stack Overflow用户

发布于 2012-04-09 17:04:33

据我所知,XPath本身不能用于此目的,因为它只是一种查询语言,所以它不用于创建或修改XML文件。为此,您需要一些其他工具。如果您对命令行工具感兴趣,也许可以查看libxslt中的xsltproc。我不是XSLT专家,但是快速浏览一下链接页面会让我觉得使用<if><value-of>可以达到预期的效果。或者你可以parse XML with regular expressions,但请不要,我听说这是一个滑坡路。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10070746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档