gpt4 book ai didi

java - 您如何在 Blackberry Java 应用程序中遍历和存储 XML?

转载 作者:行者123 更新时间:2023-11-30 11:59:25 25 4
gpt4 key购买 nike

我在访问 XML 文档的内容时遇到问题。我的目标是:获取 XML 源并将其解析为关联数组的公平等效项,然后将其存储为持久对象。

xml 非常简单:

<root>
<element>
<category_id>1</category_id>
<name>Cars</name>
</element>
<element>
<category_id>2</category_id>
<name>Boats</name>
</element>
</root>

下面是基本的 java 类。我几乎只是在上面的 http 响应之后调用 save(xml) 。是的,xml 格式正确。

    import java.io.IOException;
import java.util.Hashtable;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import java.util.Vector;
import net.rim.device.api.system.PersistentObject;
import net.rim.device.api.system.PersistentStore;
import net.rim.device.api.xml.parsers.DocumentBuilder;
import net.rim.device.api.xml.parsers.DocumentBuilderFactory;

public class database{
private static PersistentObject storeVenue;
static final long key = 0x2ba5f8081f7ef332L;
public Hashtable hashtable;
public Vector venue_list;
String _node,_element;

public database()
{
storeVenue = PersistentStore.getPersistentObject(key);
}

public void save(Document xml)
{
venue_list = new Vector();
storeVenue.setContents(venue_list);


Hashtable categories = new Hashtable();


try{

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory. newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
docBuilder.isValidating();

xml.getDocumentElement ().normalize ();

NodeList list=xml.getElementsByTagName("*");
_node=new String();
_element = new String();

for (int i=0;i<list.getLength();i++){

Node value=list.item(i).getChildNodes().item(0);
_node=list.item(i).getNodeName();
_element=value.getNodeValue();

categories.put(_element, _node);
}

}
catch (Exception e){
System.out.println(e.toString());
}

venue_list.addElement(categories);


storeVenue.commit();
}

上面的代码正在进行中,很可能存在严重缺陷。但是,我已经这样做了好几天了。我似乎永远无法获得所有子节点或名称/值对。当我将 vector 作为字符串打印出来时,通常会得到如下结果:[{ = 根, = 元素}]就是这样。没有“category_id”,没有“name”

理想情况下,我最终会得到类似[{1 = 汽车,2 = 船}]

感谢任何帮助。

谢谢

最佳答案

这是您程序的固定版本。我所做的更改如下:

  • 我从 save() 方法中删除了 DocBuilder 内容。需要这些调用来构建新的 Document。一旦你有了这样一个对象(你这样做了,因为它是作为参数传入的),你就不再需要 DocumentBuilder 了。 DocumentBuilder 的正确使用在下面的 main 方法中进行了说明。
  • _node,_element 不必是字段。它们每次通过 save 内的循环都会获得新值,所以我将它们设为局部变量。此外,我将它们的名称更改为 categoryname 以反射(reflect)它们与 XML 文档中元素的关联。
  • 永远不需要使用 new String() 创建新的 String 对象。一个简单的 "" 就足够了(参见 categoryname 变量的初始化)。
  • 循环不再遍历所有内容(通过 "*"),而是遍历 element 元素。然后有一个内部循环迭代每个元素的子元素,即:它的 category_idname 元素。
  • 在内部的每一遍中,我们根据手头节点的名称设置categoryname 变量。
  • 设置给这些变量的实际值是通过 node.getTextContent() 获得的,它返回节点封闭标签之间的内容。

数据库:

  public class database {
private static PersistentObject storeVenue;
static final long key = 0x2ba5f8081f7ef332L;
public Hashtable hashtable;
public Vector venue_list;

public database() {
storeVenue = PersistentStore.getPersistentObject(key);
}

public void save(Document xml) {
venue_list = new Vector();
storeVenue.setContents(venue_list);

Hashtable categories = new Hashtable();

try {

xml.getDocumentElement().normalize();

NodeList list = xml.getElementsByTagName("element");

for (int i = 0; i < list.getLength(); i++) {

String category = "";
String name = "";
NodeList children = list.item(i).getChildNodes();
for(int j = 0; j < children.getLength(); ++j)
{
Node n = children.item(j);
if("category_id".equals(n.getNodeName()))
category = n.getTextContent();
else if("name".equals(n.getNodeName()))
name = n.getTextContent();
}

categories.put(category, name);

System.out.println("category=" + category + "; name=" + name);
}

} catch (Exception e) {
System.out.println(e.toString());
}

venue_list.addElement(categories);

storeVenue.commit();
}
}

这是一个主要的方法:

  public static void main(String[] args) throws Exception {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
docBuilder.isValidating();

Document xml = docBuilder.parse(new File("input.xml"));

database db = new database();
db.save(xml);
}

关于java - 您如何在 Blackberry Java 应用程序中遍历和存储 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2611964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com