package csdn.xml.dom;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Text;
import java.io.File;
public class MyDomTest {
public static void main(String[] args) throws Exception {
//获得工厂对象
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
//获得解析器
DocumentBuilder builder = factory.newDocumentBuilder();
//进行解析,获得Document对象
Document doc = builder.parse(new File("src/book.xml"));
//顺序访问节点的方式找到书架节点
//NodeList nodeList = doc.getChildNodes().item(0).getChildNodes();
//System.out.println("书架的子节点数量:"+nodeList.getLength());
//随机访问已知元素名称的指定节点
//NodeList nodeList = doc.getElementsByTagName("书架");
//Node node = nodeList.item(0);
//listAllNodes(node);
//插入新节点
//createNode(doc);
//在指定位置前插入新节点
insertFixedNode(doc);
}
//对指定的节点进行遍历
public static void listAllNodes(Node node){
System.out.println("节点名:"+node.getNodeName()
+ " 节点值: "+node.getNodeValue());
if(node.getNodeType() == Node.ELEMENT_NODE){
//遍历当前元素节点的属性
if(node.hasAttributes()){
NamedNodeMap attrs = node.getAttributes();
for(int i=0; i<attrs.getLength(); i++){
Node attrNode = attrs.item(i);
System.out.println(attrNode.getNodeName() +
" : "+attrNode.getNodeValue());
}
}
//遍历当前元素节点的子结点,利用递归实现
if(node.hasChildNodes()){
NodeList nodeList = node.getChildNodes();
for(int i=0; i<nodeList.getLength(); i++){
Node childNode = nodeList.item(i);
listAllNodes(childNode); //递归
}
}
}
}
public static void createNode(Document doc) throws TransformerException{
Node node = doc.getElementsByTagName("书").item(1);
Element element = doc.createElement("出版社");
element.setTextContent("西安交大出版社");
node.appendChild(element);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult(new File("src/book.xml")));
}
public static void insertFixedNode(Document doc) throws Exception{
Node secBookNode = doc.getElementsByTagName("书").item(1);
Node priceNode = secBookNode.getChildNodes().item(4);
Element isbnElement = doc.createElement("ISBN");
Text isbnText = doc.createTextNode("123-345-333");
isbnElement.appendChild(isbnText);
//secBookNode.appendChild(isbnElement); //追加为secBookNode最后一个子结点
//插入到售价节点之前
secBookNode.insertBefore(isbnElement, priceNode);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult(new File("src/book.xml")));
}
}
分享到:
相关推荐
在这个过程中,`.attr(name)`用于获取或设置元素的属性值,`.attr.each()`则遍历元素的所有属性。需要注意的是,`.attr.each()`并不是jQuery的核心方法,而是对`jQuery.fn.attr`的一个扩展,如在描述中提到的博客...
这里,text(item.name)设置option元素的显示文本,attr("value",item.id)设置option元素的value属性值。之后,使用 $("#selDep").append(...)将新创建的option添加到id为selDep的select元素中。 知识点五:处理异步...
这个“Vb创立TreeView节点实例源码”是一个示例代码,旨在教开发者如何在VB应用程序中创建和操作TreeView控件的节点。以下是一些关于创建和管理TreeView节点的关键知识点: 1. **TreeView控件**:它是Windows Forms...
这个实例展示了如何使用MSXML库遍历XML文档的结构,包括访问节点、节点的属性和值。在实际应用中,这样的遍历可以用于数据提取、验证、转换等多种任务。需要注意的是,由于COM接口的使用,需要正确管理内存,例如...
总之,使用CMARKUP遍历XML树涉及创建CMARKUP对象、加载XML数据、遍历元素、访问属性和文本,以及可能的递归处理。理解这些基本操作是成功解析和操作XML文档的关键。在实际项目中,你需要根据具体需求调整代码,以...
这段代码会弹出一系列警告框,依次显示"apple", "orange", "banana", "watermelon", 和 "pineapple",因为`$.each`正确地遍历了数组,并访问每个对象的`tagName`属性。 然而,当尝试遍历一个JSON字符串时,问题出现...
这里需要注意的是,文档中提到了`this.slotChildren`数组,这个数组是通过遍历`this.$slots.default`来得到的,只包含那些elm属性不是文本节点的元素节点(nodeType !== 3 表示不是文本节点)。 在Vue 3中,插槽的...
5. **代码实现**:实例中的代码会演示如何在事件处理函数中编写逻辑,如何遍历TreeView的节点,如何检查和设置节点的选中状态,以及如何响应用户的操作。 6. **用户交互设计**:考虑用户体验,可能还包括提供一个...
此外,还需要注意节点类型的判断,比如判断一个节点是元素节点(元素节点通常是我们需要遍历的节点)、文本节点、属性节点等。 在使用DOM扩展处理XML时,还要注意可能的错误处理,比如文件不存在、文件格式错误等...
接下来,我们可以递归地遍历XML结构,访问每个元素节点及其属性: ```java void traverse(Element element) { // 访问元素的属性 for (Attribute attr : element.attributes()) { System.out.println("属性名: ...
本篇文章将重点介绍jQuery遍历节点树的常用方法,并结合实例展示这些方法的应用。 首先,我们需要了解基本的jQuery选择器。jQuery选择器允许我们以特定的模式选取页面中的DOM元素,比如通过id、类名、标签名或属性...
这可以通过遍历整个树并检查每个节点的`Checked`属性来实现: ```csharp public List<TreeNode> GetSelectedNodes() { return treeView.Nodes.Flatten(n => n.Nodes).Where(n => n.Checked).ToList(); } public ...
DOM将XML文档视为树形结构,其中每个节点都是一个DOM对象,可以表示为一个XML元素、属性或文本等。通过DOM,开发人员可以动态地更改XML文档的内容、结构和样式。 #### 二、Java中的DOM操作 Java提供了一套强大的API...
每个节点(TreeNode)都有一个`Checked`属性,可以设置为`True`或`False`,表示节点是否被选中。在VB中,我们可以使用`Node.Checked = True`来选中一个节点,`Node.Checked = False`来取消选择。 为了实现父子节点...
在C#编程中,你可以创建一个二叉树节点类,包含节点值、左子节点和右子节点属性,然后编写三个遍历方法,分别对应上述的三种遍历方式。例如,对于前序遍历,可以定义如下方法: ```csharp public void ...
- 遍历元素集合,检查并删除属性节点,这通过`for`循环和`attributes`属性实现。 删除节点的操作在XML文档处理中非常常见,特别是在动态更新数据或构建自定义XML结构时。正确理解和使用这些方法是XML DOM操作的基础...
遇到结束元素时,我们知道已经解析完当前节点的子节点,跳出循环。 最后,记得在主窗口或类中调用`loadXmlToTreeWidget`函数,传入XML文件路径和`QTreeWidget`实例: ```cpp QTreeWidget *treeWidget = new ...
遍历二叉树是理解和操作二叉树的关键,可以用于打印节点、查找特定值、计算属性等。 4. **冒泡排序**:冒泡排序是一种简单的排序算法,通过比较相邻元素并交换位置(如果需要)来逐步将最大(或最小)的元素“冒泡...
// 遍历元素属性 for (int i = 0; i ; i++) { reader.MoveToAttribute(i); string attrName = reader.Name; string attrValue = reader.Value; Console.WriteLine("Attribute: {0} = {1}", attrName, ...
这段代码会遍历XML文档中的每个子节点,检查它们是否是元素节点,如果是,则打印出节点名和它的所有属性。 总结来说,Delphi中处理XML主要依赖于`TXMLDocument`组件,通过创建元素、设置属性、保存和加载文件,以及...