1

我有一个要更新的 xml 文档,我正在使用递归函数遍历节点。但是,我在更新节点属性时遇到问题。我想对用户隐藏所有路径并用密钥替换它们。这是我到目前为止所拥有的

XML 文档示例:

<html>
    <head>
      <title>my document</title>
      <link rel="stylesheet" href="/styles/style.css"/>
    </head>
    <body>
      <a href="link1"></a>
      <img src="link2"/>
      <img src="link3"/>
      <img src="link1"/>
      <a href="link5"></a>
    </body>
  </html>

它通过我的递归函数传递,然后调用 updateNode 函数来更新它

def processNode(n: Node){
    if(n.label == "a") {
          updateNode(n, "href")
      }
    }
    n.child foreach processNode
  }

def updateNode(n: Node, att: String) {
val k: Int = getKey(n.attribute(att).get.toString)   
if (k == c){ // if k == c then key does not exists
  list += (c -> n.attribute(att).get.toString())
  // update node
  c = c + 1
} else {
  // update node
}}

我已经测试了 .attributes.remove 和 .attributes.append 但它们似乎没有工作。我假设我可能需要使用 .copy 但节点数据类型没有 .copy .. Elem 有

4

1 回答 1

0

我知道您正在使用 SAX 解析器将您的 XML 文档解析到内存中!那是一个解析器/阅读器。如果您想在堆上修改加载的 XML 树对象图(即以更复杂的方式从节点到节点添加属性),以便在修改后将其写回磁盘或通过线路发送,扩展树结构然后您可以使用 JAXB 库。

如果您不想花时间并且只需要更改一个属性来修复您的树,那么您可以继续使用 SAX 解析器,但是您需要临时保存并将文件(DataStream)作为字符串/文本写回一个字符串缓冲区。

于 2015-09-12T08:09:37.907 回答