You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Scala中使用XPath修改指定XML节点内容的技术需求

替换XML中指定XPath节点的解决方案

嘿,我来帮你搞定这个XML节点替换的需求!你需要把目标XML里通过doc("videos")("vid")定位到的<vid>Head</vid>节点,替换成<video type="usb">one</video>。下面我用Groovy(因为你的代码写法很像Groovy的XML处理风格)来演示具体操作步骤:

原始XML文档

首先先明确我们要处理的原始XML:

<library>
  <videos>
    <vid>Head</vid>
    <video type="dvd">Seven</video>
    <video type="blue-ray">The fifth element</video>
    <video type="hardcover">Gardens of the moon</video>
  </videos>
  <books>
    <book type="softcover">Memories of Ice</book>
  </books>
</library>

具体实现代码

这里用Groovy的XmlSlurper和replaceNode方法来完成替换,完全匹配你指定的XPath路径:

// 解析原始XML
def doc = new XmlSlurper().parseText('''
<library>
  <videos>
    <vid>Head</vid>
    <video type="dvd">Seven</video>
    <video type="blue-ray">The fifth element</video>
    <video type="hardcover">Gardens of the moon</video>
  </videos>
  <books>
    <book type="softcover">Memories of Ice</book>
  </books>
</library>
''')

// 通过指定的XPath路径定位目标节点
def targetNode = doc("videos")("vid")

// 替换节点:直接用新的video节点覆盖原vid节点
targetNode.replaceNode {
    video(type: 'usb', 'one')
}

// 格式化输出处理后的XML
def printer = new XmlNodePrinter(new PrintWriter(System.out))
printer.preserveWhitespace = true
printer.print(doc)

处理后的结果

运行上面的代码后,你会得到替换后的XML:

<library>
  <videos>
    <video type="usb">one</video>
    <video type="dvd">Seven</video>
    <video type="blue-ray">The fifth element</video>
    <video type="hardcover">Gardens of the moon</video>
  </videos>
  <books>
    <book type="softcover">Memories of Ice</book>
  </books>
</library>

其他语言的思路参考

如果是用Java(比如JDOM2、DOM API)或者其他支持XML操作的语言,核心思路都是一致的:

  • 用XPath定位到目标节点
  • 创建带有指定属性和内容的新节点
  • 移除原节点,将新节点插入到原节点的位置

内容的提问来源于stack exchange,提问作者s.Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:24:13