`
longch
  • 浏览: 11993 次
  • 性别: Icon_minigender_1
  • 来自: 中国-广东
最近访客 更多访客>>
社区版块
存档分类
最新评论

自己写的一个XML元素类

XML 
阅读更多

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;
 }
}

分享到:
评论

相关推荐

    pugixml读写XML示例

    `xml_document`代表整个XML文档,而`xml_node`表示文档中的一个节点,可以是元素、属性、文本等。 读取XML文件: 1. **初始化pugixml库**:在使用pugixml之前,需要包含头文件`#include &lt;pugixml.hpp&gt;`。 2. **加载...

    自己做的第一个xml的例子,包括读写

    - **XmlElement类**:表示XML元素,可以通过AddChild、RemoveChild等方法操作子元素。 - **XmlNodeReader和XmlWriter**:用于流式读写XML,效率较高,适用于大文件操作。 - **XDocument和LINQ to XML**:.NET ...

    xml读写帮助类

    本文将深入探讨“XML读写帮助类”的相关知识点,包括XML的基本结构、解析方式、读写操作以及如何创建一个实用的Java XML助手类。 1. XML基本结构: - 元素(Element):XML文档的核心,如`&lt;book&gt;`,元素可以包含...

    自己写的java对xml文件操作的类

    本项目中,你创建了一个自定义的Java类,用于实现XML文件的基本操作,包括读取、属性和值的读取以及元素的增加和删除。 首先,我们来了解一下XML文件的基础操作。XML文件由一系列元素组成,每个元素可能包含属性和...

    C++ 读写XML文件

    MFC虽然不是一个专门处理XML的库,但它提供了一些基础的支持,如CXMLElement类和CXMLNode类,这些类可以帮助我们解析和生成XML文档。 以下是一个简单的使用MFC处理XML的步骤: 1. **加载XML文件**:使用`CFile`类...

    易语言模块 XMLDOM 解析 构造 获取 更改 添加 删除 遍历元素 格式化XML

    2、IXMLDOMNode类:每个元素或节点基本都会有的方法;作为元素和节点的基类调用 3、IXMLDOMAttribute类:就是元素或节点的属性类 4、其他类都是基于上面这几个类来拓展各种功能的。 5、XMLDOM教程文档推荐参考:...

    VC++ ,XML类,XML文件读写类

    - `Markup.cpp`和`Markup.h`文件中定义了一个自定义的XML类,它可能简化了XML的读写过程,提供了更友好的API。 - 这个类可能会包含解析XML文件、创建XML节点、设置属性、添加子节点、序列化XML为字符串等功能。 -...

    c++ 关于xml的一个类

    这意味着需要提供方法来添加、修改和删除XML元素及属性。 3. **查询和修改元素**:提供方法来查找XML文档中的特定元素,以及对这些元素进行修改。这可能包括按标签名、ID或其他属性进行查询。 4. **事件驱动的解析...

    pugixml 一个很好用的XML类

    3. `xml_attribute`:表示XML元素的属性,每个属性由名称和值组成。 **三、使用Pugixml解析XML** 1. **加载XML文档**:使用`xml_document::load_file()`或`xml_document::parse()`函数加载XML文件或XML字符串。 2....

    读写Xml类.rar

    一个`XmlWriter`类用于写入XML,提供`writeNode(Node node, String filePath)`方法。 使用这些类,开发者无需关心底层的解析细节,只需关注业务逻辑。在实际应用中,可能还会涉及XML的验证(使用DTD或XML Schema)...

    Csharp读写XML文件

    2. **XmlNode** 和其子类:XmlNode代表XML文档中的一个节点,如元素(XmlElement)、属性(XmlAttribute)等。 3. **XmlNodeReader** 和 **XmlWriter**:用于流式读取和写入XML文档,效率较高,但不如DOM灵活。 4....

    XML读写tinyxml

    TinyXML,正如其名,是一个轻量级的C++库,专门用于解析和生成XML文档。这个库设计简洁,易于集成到你的项目中,只需包含相应的头文件并链接相应的源文件即可开始使用。 TinyXML库的核心组件包括以下部分: 1. **...

    使用tinyxml 读写xml文件方法

    TinyXML 是一个小型、开源的 C++ 库,专门用于解析和生成 XML(eXtensible Markup Language)文档。在本文中,我们将深入探讨如何使用 TinyXML 来读写 XML 文件,以及它在 Visual C++ 开发环境中的应用。 1. **Tiny...

    java一键xml转map,一键map转xml工具类

    本文将详细讲解如何使用Java实现XML到Map以及Map到XML的一键转换,并介绍一个已封装好的工具类`EasyXmlUtil`。 首先,XML到Map的转换涉及到XML的解析。在Java中,我们可以使用`javax.xml.parsers....

    一个通过DataSet操作XML的类

    本文介绍了一个通过 DataSet 操作 XML 的类,该类提供了读取、插入、修改、删除 XML 记录的方法,能够满足用户对 XML 文件的各种操作需求。 基本思想是使用 DataSet 来操作 XML 文件。DataSet 是 ADO.NET 中的一种...

    C# LinqXML合计XML元素值

    本文将深入探讨如何使用C#的LINQ to XML来合计XML元素的值。 首先,我们需要了解XML的基本结构。XML(Extensible Markup Language)是一种用于存储和传输数据的格式,其主要特点是自解释性和灵活性。XML文档由一...

    一次代码重构之旅-快速读写xml文件工具类封装

    本次重构的主题是创建一个快速读写XML文件的工具类,这在处理数据存储和交换时非常常见。XML(eXtensible Markup Language)是一种结构化数据格式,广泛应用于配置文件、数据传输和数据存储等领域。 在描述中提到的...

    c++读取xml工具类TinyXml

    3. **TiXmlAttribute**: 存储XML元素的属性,每个属性由名称和值组成。 4. **TiXmlText**: 用于表示元素内的文本内容。 5. **TiXmlComment**: 用于处理XML注释。 6. **TiXmlDeclaration**: 处理XML声明,如`&lt;?xml ...

    C# LinqXML删除一个元素的所有属性

    本文将深入探讨如何使用LINQ to XML来删除一个XML元素的所有属性。我们将从基本概念开始,逐步深入到具体实现,以及如何在实际项目中应用这个技术。 首先,了解LINQ to XML的基本概念。它是.NET Framework的一部分...

Global site tag (gtag.js) - Google Analytics