Два замечания:
1- При попытке напечатать объект StudentCinstructor
, если нет выделенного метода toString()
, вы не получите хорошо структурированный вывод. Следовательно, вам нужно написать метод toString()
для вашего класса, а затем вы можете вывести его на консоль. Пример:
public static String toString() {
return "Customize here + Put this method inside your class";
}
2 - Я не понимаю, почему вы используете LinkedHashSet
для хранения объектов StudentCinstructor
, а затем сохраняете этот HashSet внутри карты вместо создания объекта StudentCinstructor
и сохранения это непосредственно на карте, если у всех студентов есть уникальный идентификатор. Такие как:
HashMap<Integer, StudentCinstructor> st = new HashMap<>();
Вы - верный XPath, реализован в Вашей версии Internet Explorer? Как в: какую версию Вы используете?
Привет хорошо в конце я предложил свое собственное изворотливое решение, любые предложения при улучшении, это будет значительно цениться. Это использует некоторую опытную функциональность:
Работы в IE5 + с xpath формы "/html/body/div [9] / DIV [2]"
функционируйте getXPathElement (xpath, элемент) {
//Specific to project, here i know that the body element will always have the id "top"
//but otherwise the element that is passed in should be first element in the xpath
//statement eg. /HTML/BODY/DIV the element passed in should be HTML
if(!element){
element = $("top");
var xpathArrayIndex = 3;
} else {
var xpathArrayIndex = 1;
}
//split the xpath statement up
var xpathArray = xpath.split("/");
var carryOn = true;
while(carryOn){
decendents = element.childElements();
//check to see if we are at the end of the xpath statement
if(xpathArrayIndex == xpathArray.length){
return element;
}
//if there is only one decendent make it the next element
if(decendents.size() == 1) {
element = decendents.first();
} else {
//otherwise search the decendents for the next element
element = getXPathElementByIndex(decendents, xpathArray[xpathArrayIndex]);
}
xpathArrayIndex++;
}
}
функционируйте getXPathElementByIndex (потомки, xpathSegment) {
var decendentsArray = decendents.toArray();
//seperate the index from the element name
var temp = xpathSegment.split("[");
var elementName = temp[0];
//get the index as a number eg. "9]" to 9
var elementIndex = +temp[1].replace("]", "");
//the number of matching elements
var count = 0;
//keeps track of the number of iterations
var i = 0;
while(count != elementIndex) {
//if the decendent's name matches the xpath element name increment the count
if(decendentsArray[i].nodeName == elementName){
count++;
}
i++;
}
var element = decendentsArray[i - 1];
return element;
}
Благодаря всем для их справки так или иначе я узнал немного о различных платформах JavaScript.
Смотрите на проект http://dev.abiss.gr/sarissa/. Они переместили большинство XML-связанных API в IE. Иначе действительно также легко реализовать. Проблемы, которые необходимо было бы решить, будут: сериализация HTML в допустимый XML, синхронизируя результат XPath XMLDOM запрашивает с исходным HTMLDOM. К моему знанию они сделали это в своей библиотеке, однако, ее производительность, возможно, была лучше.
Вместо выполнения
xmlDoc.load(document);
попробовать
xmlDoc.loadXML(document.body.outerHTML)
Это только действительно работало бы, если Ваш Ваш документ HTML отформатирован к стандартам XHTML. Кроме того, Тег основного текста был бы корневым узлом, таким образом, необходимо будет изменить XPath на "/body/div [9] / DIV [2]"
jQuery реализует cross-browser-compatible подмножество xPath селекторов с плагином. Ваш пример "/html/body/div [9] / DIV [2]" должен работать в нем.
(редактирование - исправленный благодаря Sergey Ilinsky)
Я был бы немного взволнован по поводу использования xml как это, поскольку Вы не можете быть уверены, какую версию (если таковые имеются) DLL XML человек имеет. Существуют все еще компании с помощью IE5.0 там группами, и 5.5 имел особенно скверную реализацию XML.
Another JavaScript implementation of W3C Dom Level 3 XPath can be found on Source Forge. But does not appear to be active.
Может быть, в IE5 + [1] на самом деле [2] в FF. Microsoft исключительно решила, что нумерация должна начинаться с [0], а не [1], как указано W3C.
В коде oly1234 есть некоторые ошибки, которые я пытаюсь исправить следующим образом:
function getXPathElement(xpath, element){
if(!element){
element = document;
}
var xpathArray = xpath.split("/");
element = findXPathRoot(xpathArray[0],xpathArray[1],element);
for(var i=1; i<xpathArray.length; i++){
if(xpathArray[i].toLowerCase()=="html"){
continue;
}
if(!element){
return element;
}
element = getXPathElementByIndex(element.childNodes,xpathArray[i]);
}
return element;
}
function findXPathRoot(rootPath,htmlPath,element){
if(rootPath == ""&&htmlPath.toLowerCase() == "html"){
return element.documentElement;
}
return document.getElementsByTagName(rootPath)[0];
}
function getXPathElementByIndex(decendents, xpathSegment){
//seperate the index from the element name
var temp = xpathSegment.split("[");
var elementName = temp[0];
//get the index as a number eg. "9]" to 9
if(temp[1]){
var elementIndex = temp[1].replace("]", "");
}else{
var elementIndex = 1;
}
//the number of matching elements
var count = 0;
for(var i=0;i < decendents.length; i++){
if (decendents[i].nodeName.toLowerCase() == elementName.toLowerCase()) {
count++;
if(count==elementIndex){
return decendents[i];
}
}
}
return null;
}
Я не могу найти простое и общее решение, вы можете написать пользовательскую функцию, чтобы реализовать немного xpath, но это трудно получить полный в internet explorer 6 или более низкой версии....