package edu.basejava.util;
class Element
{
private String name;
private String text;
private Element parent;
private LinkedList<Attribute> attributes;
private LinkedList<Element> children;
public boolean isRoot()
{
return parent == null;
}
public boolean isLeaf()
{
return children == null;
}
public boolean hasChild()
{
return children != null;
}
public boolean hasAttribute()
{
return attributes != null;
}
public void addAttribute(Attribute ab)
{
if (!hasAttribute())
attributes = new LinkedList<Attribute>();
attributes.append(ab);
}
public void editAttribute(String name, String value)
{
for (Attribute ab : attributes)
if (ab.getName().equals(name))
ab.setValue(value);
}
public Attribute getAttribute(String name)
{
for (Attribute ab : attributes)
if (ab.getName().equals(name))
return ab;
return null;
}
public void delAttribute(String name)
{
this.attributes.setFirst();
for (Attribute ab : this.attributes)
if (ab.getName().equals(name))
attributes.remove(ab);
}
public void editChild(Element e)
{
for (Element cd : this.children)
if (cd.getName().equals(e.getName()))
{
cd.getParent().getChildren().remove(cd);
cd.setAttributes(e.getAttributes());
cd.setChildren(e.getChildren());
cd.setParent(e.getParent());
cd.setText(e.getText());
}
}
public void delChild(String name)
{
this.children.setFirst();
for (Element cd : this.children)
if (cd.getName().equals(name))
children.remove(cd);
}
public void addChild(Element e)
{
if (children == null)
children = new LinkedList<Element>();
e.setParent(this);
children.append(e);
}
public Element getChild(String name)
{
for (Element e : children)
{
if (e.getName().equals(e))
return e;
}
return null;
}
public Element(String name, Attribute... attributes)
{
this.name = name;
if (attributes.length != 0)
{
this.attributes = new LinkedList<Attribute>();
for (Attribute ab : attributes)
this.addAttribute(ab);
}
}
public Element(String name, String text, Attribute... attributes)
{
this.name = name;
this.text = text;
if (attributes.length != 0)
{
this.attributes = new LinkedList<Attribute>();
for (Attribute ab : attributes)
this.attributes.append(ab);
}
}
private String recurElement(Element e)
{
StringBuffer sb = new StringBuffer();
if (e != null)
{
if (e.hasAttribute())
{
sb.append(XmlSymbol
.startElement(e.getName(), e.getAttributes()));
} else
sb.append(XmlSymbol.startElement(e.getName()));
if (e.getText() != null)
sb.append(e.getText());
if (e.hasChild())
{
for (Element el : e.getChildren())
sb.append(e.recurElement(el));
}
sb.append(XmlSymbol.endElement(e.getName()));
}
return sb.toString();
}
public String toString()
{
return this.recurElement(this);
}
public static void main(String[] args)
{
Element e1 = new Element("long", new Attribute("test", "value"));
Element e2 = new Element("child", "子节点", new Attribute("id1",
"firstchild"), new Attribute("id2", "firstchild"));
Element e3 = new Element("叶子");
e1.addChild(e2);
e2.editAttribute("id2", "edit");
e2.addChild(e3);
e2.delAttribute("id1");
e2.addAttribute(new Attribute("tt", "eeer"));
e2.addAttribute(new Attribute("tt2", "eeer"));
Log.println(e3);
// Log.debug(el);
}
public LinkedList<Attribute> getAttributes()
{
return attributes;
}
public void setAttributes(LinkedList<Attribute> attributes)
{
this.attributes = attributes;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public Element getParent()
{
return parent;
}
public void setParent(Element parent)
{
this.parent = parent;
}
public LinkedList<Element> getChildren()
{
return children;
}
public void setChildren(LinkedList<Element> children)
{
for (Element e : children)
e.setParent(this);
this.children = children;
}
public String getText()
{
return text;
}
public void setText(String text)
{
this.text = text;
}
}
分享到:
相关推荐
`xml_document`代表整个XML文档,而`xml_node`表示文档中的一个节点,可以是元素、属性、文本等。 读取XML文件: 1. **初始化pugixml库**:在使用pugixml之前,需要包含头文件`#include <pugixml.hpp>`。 2. **加载...
- **XmlElement类**:表示XML元素,可以通过AddChild、RemoveChild等方法操作子元素。 - **XmlNodeReader和XmlWriter**:用于流式读写XML,效率较高,适用于大文件操作。 - **XDocument和LINQ to XML**:.NET ...
本文将深入探讨“XML读写帮助类”的相关知识点,包括XML的基本结构、解析方式、读写操作以及如何创建一个实用的Java XML助手类。 1. XML基本结构: - 元素(Element):XML文档的核心,如`<book>`,元素可以包含...
本项目中,你创建了一个自定义的Java类,用于实现XML文件的基本操作,包括读取、属性和值的读取以及元素的增加和删除。 首先,我们来了解一下XML文件的基础操作。XML文件由一系列元素组成,每个元素可能包含属性和...
MFC虽然不是一个专门处理XML的库,但它提供了一些基础的支持,如CXMLElement类和CXMLNode类,这些类可以帮助我们解析和生成XML文档。 以下是一个简单的使用MFC处理XML的步骤: 1. **加载XML文件**:使用`CFile`类...
2、IXMLDOMNode类:每个元素或节点基本都会有的方法;作为元素和节点的基类调用 3、IXMLDOMAttribute类:就是元素或节点的属性类 4、其他类都是基于上面这几个类来拓展各种功能的。 5、XMLDOM教程文档推荐参考:...
- `Markup.cpp`和`Markup.h`文件中定义了一个自定义的XML类,它可能简化了XML的读写过程,提供了更友好的API。 - 这个类可能会包含解析XML文件、创建XML节点、设置属性、添加子节点、序列化XML为字符串等功能。 -...
这意味着需要提供方法来添加、修改和删除XML元素及属性。 3. **查询和修改元素**:提供方法来查找XML文档中的特定元素,以及对这些元素进行修改。这可能包括按标签名、ID或其他属性进行查询。 4. **事件驱动的解析...
一个`XmlWriter`类用于写入XML,提供`writeNode(Node node, String filePath)`方法。 使用这些类,开发者无需关心底层的解析细节,只需关注业务逻辑。在实际应用中,可能还会涉及XML的验证(使用DTD或XML Schema)...
2. **XmlNode** 和其子类:XmlNode代表XML文档中的一个节点,如元素(XmlElement)、属性(XmlAttribute)等。 3. **XmlNodeReader** 和 **XmlWriter**:用于流式读取和写入XML文档,效率较高,但不如DOM灵活。 4....
TinyXML,正如其名,是一个轻量级的C++库,专门用于解析和生成XML文档。这个库设计简洁,易于集成到你的项目中,只需包含相应的头文件并链接相应的源文件即可开始使用。 TinyXML库的核心组件包括以下部分: 1. **...
TinyXML 是一个小型、开源的 C++ 库,专门用于解析和生成 XML(eXtensible Markup Language)文档。在本文中,我们将深入探讨如何使用 TinyXML 来读写 XML 文件,以及它在 Visual C++ 开发环境中的应用。 1. **Tiny...
本文将详细讲解如何使用Java实现XML到Map以及Map到XML的一键转换,并介绍一个已封装好的工具类`EasyXmlUtil`。 首先,XML到Map的转换涉及到XML的解析。在Java中,我们可以使用`javax.xml.parsers....
本文介绍了一个通过 DataSet 操作 XML 的类,该类提供了读取、插入、修改、删除 XML 记录的方法,能够满足用户对 XML 文件的各种操作需求。 基本思想是使用 DataSet 来操作 XML 文件。DataSet 是 ADO.NET 中的一种...
本文将深入探讨如何使用C#的LINQ to XML来合计XML元素的值。 首先,我们需要了解XML的基本结构。XML(Extensible Markup Language)是一种用于存储和传输数据的格式,其主要特点是自解释性和灵活性。XML文档由一...
然后,定义了一个 XmlTest 类,该类包含一个 main 方法,该方法中首先获取 XML 文件的根元素,然后调用 getElementList 方法来遍历 XML 文件中的所有元素节点,并将其值取出来。 在 getElementList 方法中,使用...
本次重构的主题是创建一个快速读写XML文件的工具类,这在处理数据存储和交换时非常常见。XML(eXtensible Markup Language)是一种结构化数据格式,广泛应用于配置文件、数据传输和数据存储等领域。 在描述中提到的...
3. **TiXmlAttribute**: 存储XML元素的属性,每个属性由名称和值组成。 4. **TiXmlText**: 用于表示元素内的文本内容。 5. **TiXmlComment**: 用于处理XML注释。 6. **TiXmlDeclaration**: 处理XML声明,如`<?xml ...
本文将深入探讨如何使用LINQ to XML来删除一个XML元素的所有属性。我们将从基本概念开始,逐步深入到具体实现,以及如何在实际项目中应用这个技术。 首先,了解LINQ to XML的基本概念。它是.NET Framework的一部分...
3. `xml_attribute`:表示XML元素的属性,每个属性由名称和值组成。 **三、使用Pugixml解析XML** 1. **加载XML文档**:使用`xml_document::load_file()`或`xml_document::parse()`函数加载XML文件或XML字符串。 2....