日期:2014-05-20  浏览次数:20742 次

dom4j 泛型警告,另个问题是思路优化,如何取得elements()最后一个元素的属性


/**
 * 取得最后一个question的id,如果没有返回0
 */
// @SuppressWarnings("unchecked")
private static int getLastVoteId()
{
List<Element> list = XMLUtil.load(CharacterUtil.XML_PATH).getRootElement().elements();
if (0 == list.size())
{
return 0;
}
else
{
String tempIdString = null;

for (Element element : list)
{
tempIdString = element.attributeValue("id");
}
return Integer.parseInt(tempIdString);
}
}


问题一在elements(),结果为一个list,但是老黄色警告,英语水平有限,实在看不懂“list需要未检查的”,不明白是什么意思
Type safety: The expression of type List needs unchecked conversion to conform to List<Element>

问题二:求思路优化

XML的结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<questions>
<question id="1" voteName="投票题目1" voteType="1">
<voteOption num="0">选项1</voteOption>
<voteOption num="0">选项2</voteOption>
<voteOption num="0">选项3</voteOption>
</question>
<question id="2" voteName="投票题目2" voteType="2">
<voteOption num="0">选项1</voteOption>
<voteOption num="0">选项2</voteOption>
</question>
</questions>


如何拿到最后一个id的值,思路是"id 作为唯一不重复的值",我的方法自己觉得比较笨,遍历所有的question拿值,最后一次赋值就是最后一个值,但是如果是一万条,就需要取值一万次觉得比较笨

另外还个担心,如果XML结构变成这样(虽然不知道怎么会变成那样,只是觉得可能):

<?xml version="1.0" encoding="UTF-8"?>
<questions>
<question id="2" voteName="投票题目2" voteType="2">
<voteOption num="0">选项1</voteOption>
<voteOption num="0">选项2</voteOption>
</question>
<question id="1" voteName="投票题目1" voteType="1">
<voteOption num="0">选项1</voteOption>
<voteOption num="0">选项2</voteOption>
<voteOption num="0">选项3</voteOption>
</question>
</questions>


我的思路似乎就错了,不该取最后一个了,而是遍历比较,拿出最大的那个,那一万条似乎只能遍历一万次比较(一万-1)次了?

添加元素会出现不按前后顺序的情况吗?询问下



先谢谢答复我的朋友,和关注我问题的朋友们!
dom4j 泛型 elements() 遍历

------解决方案--------------------
Node node = doc.selectSingleNode("(//question)[last()]/@id");
if(node != null) String id = node.getText();


http://stackoverflow.com/questions/8702039/how-to-find-the-max-attribute-from-an-xml-document-using-xpath-1-0
------解决方案--------------------
(//question)[last()]/@id 的意思就是最后一个question的id属性。