为什么不能向XML文件中的空结点中添加子结点?

submitand 2004-06-22 12:34:33
我写了一个向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


多谢了
...全文
77 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
CsdnRob 2004-07-02
  • 打赏
  • 举报
回复
<script language="JavaScript"> function check() 之间加入下列语句: function isnumber(c) { if ((c>='0') && (c<='9')) return true; else return false; } function check_num(s) { for (i=0; i<s.length; i++) { n = s.substr(i, 1) if (!isnumber(n)) { return false; } } return true; } 然后在function check()里面加入: if (!check_num(p)) { alert("只能由数字(0-9)构成!"); document.form1.pwsd.focus(); document.form1.pwsd.select(); return; }
submitand 2004-06-22
  • 打赏
  • 举报
回复
多谢楼上的!
InternetEmail 2004-06-22
  • 打赏
  • 举报
回复
TagTemplate类中的addElement方法中的for语句有误:
public void addElement(String strTagName, String strElementName, String strElementType)
{
....
for(int index = 0; index < tagListLenth; tagListLenth++)
{
........
}
}

应该是:

public void addElement(String strTagName, String strElementName, String strElementType)
{
....
for(int index = 0; index < tagListLenth; index++)
{
........
}
}

可能是你不小心写错了吧

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧