#
第十六章 创建或编辑DOM # 创建或编辑DOM 要创建`DOM`或修改现有`DOM`,请使用`%XML.Document`的以下方法在: ### CreateDocument() ```java classmethod CreateDocument(localName As %String, namespace As %String) as %XML.Document ``` 在仅包含根元素的返回`%XML.Document`新实例。 ### AppendCharacter() ```java method AppendCharacter(text As %String) ``` 将新的字符数据节点追加到此元素节点的子节点列表中。当前节点指针不变;此节点仍然是追加的子节点的父节点。 ### AppendChild() ```java method AppendChild(type As %String) ``` 将新节点追加到此节点的子节点列表中。当前节点指针不变;此节点仍然是追加的子节点的父节点。 ### AppendElement() ```java method AppendElement(localName As %String, namespace As %String, text As %String) ``` 将新元素节点追加到此节点的子节点列表中。如果指定了文本参数,则字符数据将添加为新元素的子元素。当前节点指针不变;此节点仍然是追加的子节点的父节点。 ### AppendNode() ```java method AppendNode(sourceNode As %XML.Node) as %Status ``` 将指定节点的副本追加为此节点的子节点。要复制的节点可以来自任何文档。当前节点指针不变。此节点仍然是追加的子节点的父节点。 ### AppendTree() ```java method AppendTree(sourceNode As %XML.Node) as %Status ``` 将指定节点的副本(包括其所有子节点)追加为此节点的子节点。要复制的树可以来自任何文档,但此节点不能是源节点的后代。当前节点指针不变。此节点仍然是追加的子节点的父节点。 ### InsertNamespace() ```java method InsertNamespace(namespace As %String) ``` 将给定的命名空间`URI`添加到文档。 ### InsertCharacter() ```java method InsertCharacter(text as %String, ByRef child As %String, Output sc As %Status) as %String ``` 插入一个新的字符数据节点作为此节点的子节点。新字符数据恰好插入在指定的子节点之前。子参数是子节点的节点ID;它通过引用传递,以便可以在插入后进行更新。返回插入节点的nodeId。当前节点指针不变。 ### InsertNode() ```java method InsertNode(sourceNode As %XML.Node, ByRef child As %String, Output sc As %Status) as %String ``` 插入指定节点的副本作为此节点的子节点。要复制的节点可以来自任何文档。新节点恰好插入在指定的子节点之前。子参数是子节点的节点ID;它通过引用传递,以便可以在插入后进行更新。返回插入节点的nodeId。当前节点指针不变。 ### InsertTree() ```java method InsertTree(sourceNode As %XML.Node, ByRef child As %String, Output sc As %Status) as %String ``` 插入指定节点的副本(包括其子节点)作为此节点的子节点。要复制的树可以来自任何文档,但此节点不能是源节点的后代。新节点恰好插入在指定的子节点之前。子参数是子节点的节点ID;它通过引用传递,以便可以在插入后进行更新。返回插入节点的nodeId。当前节点指针不变。 ### Remove() ```java method Remove() ``` 移除当前节点并使其父节点成为当前节点。 ### RemoveAttribute() ```java method RemoveAttribute(attributeName As %String) ``` 删除给定的属性。 ### RemoveAttributeNS() ```java method RemoveAttributeNS(attributeName As %String, namespace As %String) ``` 移除给定属性,其中属性名称和命名空间指定感兴趣的属性。 ### ReplaceNode() ```java method ReplaceNode(sourceNode As %XML.Node) as %Status ``` 用指定节点的副本替换该节点。要复制的节点可以来自任何文档。当前节点指针不变。 ### ReplaceTree() ```java method ReplaceTree(sourceNode As %XML.Node) as %Status ``` 将该节点替换为指定节点的副本,包括其所有子节点。要复制的树可以来自任何文档,但不能是源节点的后代。当前节点指针不变。 ### SetAttribute() ```java method SetAttribute(attributeName As %String, namespace As %String = "", value As %String = "", valueNamespace As %String = "") ``` 设置当前元素的属性的数据。这里: - `attributeName` 是属性的名称。 - `namespace` 是来自此元素的属性`AttributeName`的`QName`的命名空间URI。 - `value` 是属性值。 - `valueNamespace` 当属性值为`“prefix:value”`形式时,`valueNamespace`是前缀对应的命名空间URI。 # 从DOM编写XML输出 可以序列化`DOM`或`DOM`的节点并生成XML输出。要执行此操作,请使用`%XML.Writer`的以下方法。 ## Document() ```java method Document(document As %XML.Document) as %Status ``` 如果给定%XML.Document实例,此方法会将文档写入当前指定的输出目标。 ## DocumentNode() ```java method DocumentNode(document As %XML.Node) as %Status ``` 给定`%XML.Node`,此方法将该节点写入当前指定的输出目标。 ## Tree() ```java method Tree(node As %XML.Node) as %Status ``` 给定`%XML.Node`实例,此方法将节点及其子代树写入当前指定的输出目标。