为什么不能向XML文件中的空结点中添加子结点?
我写了一个向XML文件添加结点的小程序,XML文件的结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<Tags>
<Tag name="PopupStr2">
<element>
<name>name</name>
<type>leaf</type>
</element>
</Tag>
<Tag name="AddTag" />
</Tags>
程序中的Element类用于存储xml文件中的element结点;TagTemplate类用于存储xml文件中的Tag结点;TagMaintenance类用于添加Tag实例和element实例;DB类用于读写XML文件
=======================================================
public class Element
{
private String strEleName;
private String strEleType;
public ElementType()
{
}
public void setElementName(String strName)
{
strEleName = strName;
}
public String getElementName()
{
return strEleName;
}
public void setElementType(String strType)
{
strEleType = strType;
}
public String getElementType()
{
return strEleType;
}
}
=======================================================
public class TagTemplate
{
private String strTagName;
private int elementCount;
private ArrayList eleList = new ArrayList();
public TagTemplate(String name)
{
strTagName = name;
elementCount = 0 ;
}
public String getName()
{
return strTagName;
}
public void addElement(String name,String type)
{
Element element = new Element();
element.setElementName(name);
element.setElementType(type);
eleList.add(element);
elementCount++;
}
public int getElementCount()
{
return elementCount;
}
}
=======================================================
public class TagMaintenance
{
private ArrayList tagList;
public TagMaintenance(ArrayList list)
{
tagList = list;
}
public void addTag(String tagName)
{
TagTemplate newTag = new TagTemplate(tagName);
tagList.add(newTag);
}
public void addElement(String strTagName, String strElementName, String strElementType)
{
int tagListLenth = tagList.size();
for(int index = 0; index < tagListLenth; tagListLenth++)
{
String tagName = ((TagTemplate)tagList.get(index)).getName();
if(tagName.compareTo(strTagName) == 0)
{
((TagTemplate)tagList.get(index)).addElement(strElementName, strElementType);
break;
}
}
}
}
================================================
public class DB
{
public DB()
{
}
public void readFile(String fileName, ArrayList list)
{
ArrayList tagList = list;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document document = null;
try
{
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse( new File(fileName) );
}
catch(SAXException sxe)
{
Exception exc = sxe;
if(sxe.getException() != null)
exc = sxe.getException();
exc.printStackTrace();
}
catch(ParserConfigurationException pce)
{
System.out.println(pce.getMessage());
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
Element root = document.getDocumentElement();
NodeList tags = root.getElementsByTagName("Tag");
for(int index = 0; index < tags.getLength(); index++)
{
Element tag = (Element)tags.item(index);
String strTagName = tag.getAttribute("name");
TagTemplate tagTemplate = new TagTemplate(strTagName);
NodeList elements = tag.getElementsByTagName("element");
for(int eleIndex = 0; eleIndex < elements.getLength(); eleIndex++)
{
Element element = (Element)elements.item(eleIndex);
NodeList elementNameNodeList = element.getElementsByTagName("name");
Element elementNameNode = (Element)elementNameNodeList.item(0);
String elementName = ((Text)elementNameNode.getFirstChild()).toString();
NodeList elementTypeNodeList = element.getElementsByTagName("type");
Element elementTypeNode = (Element)elementTypeNodeList.item(0);
String elementType = ((Text) elementTypeNode.getFirstChild()).toString();
tagTemplate.addElement(elementName, elementType);
}
tagList.add(tagTemplate);
}
}
public void writeFile(ArrayList tagList, String fileName)
{
//略
}
=====================================================================
向非空的Tag结点中添加element,可以添加
public static void main(String[] args)
{
String xmlFileName = "Tags.xml";
ArrayList tagList = new ArrayList();
TagMaintenance tagMain = new TagMaintenance(tagList);
DB db = new DB();
db.readFile(xmlFileName,tagList);
tagMain.addElement("PopupStr2", "AddElement","AddType");
for(int index=0; index<tagList.size(); index++)
{
TagTemplate tagTemplate = (TagTemplate)tagList.get(index);
String tagName = tagTemplate.getName();
System.out.println(tagName);
int elementCount = tagTemplate.getElementCount();
for(int i=0; i<elementCount; i++)
{
String eleName = tagTemplate.getElementName(i);
System.out.println(eleName);
String eleType = tagTemplate.getElementType(i);
System.out.println(eleType);
}
}
}
输出结果:
PopupStr2
name
leaf
AddElement
AddType
AddTag
但是向空的Tag结点中添加element,就添加不进去了,这使为什么呢?应该怎样解决啊?
public static void main(String[] args)
{
String xmlFileName = "Tags.xml";
ArrayList tagList = new ArrayList();
TagMaintenance tagMain = new TagMaintenance(tagList);
DB db = new DB();
db.readFile(xmlFileName,tagList);
tagMain.addElement("AddTag", "AddElement","AddType");
for(int index=0; index<tagList.size(); index++)
{
TagTemplate tagTemplate = (TagTemplate)tagList.get(index);
String tagName = tagTemplate.getName();
System.out.println(tagName);
int elementCount = tagTemplate.getElementCount();
for(int i=0; i<elementCount; i++)
{
String eleName = tagTemplate.getElementName(i);
System.out.println(eleName);
String eleType = tagTemplate.getElementType(i);
System.out.println(eleType);
}
}
}
输出结果:
PopupStr2
name
leaf
AddTag
多谢了