По некоторым причинам существует две стандартных библиотеки в PHP обработка произвольной длины / числа точности: до н.э Математика и GMP. Я лично предпочитаю GMP, поскольку это более ново и имеет более богатый API.
На основе GMP я реализовал класс Decimal2 для того, чтобы сохранить и обработать суммы валюты (как 100,25 доллара США). Много из ультрасовременных вычислений там w/o любые проблемы. Протестированный с очень большие количества.
//book[title[@lang='it']]
фактически эквивалентен
//book[title/@lang = 'it']
Я пробовал использовать vtd-xml, оба выражения дают одинаковый результат ... какой механизм обработки xpath вы использовали? Я думаю, это проблема соответствия Ниже приведен код
import com.ximpleware.*;
public class test1 {
public static void main(String[] s) throws Exception{
VTDGen vg = new VTDGen();
if (vg.parseFile("c:/books.xml", true)){
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("//book[title[@lang='it']]");
//ap.selectXPath("//book[title/@lang='it']");
int i;
while((i=ap.evalXPath())!=-1){
System.out.println("index ==>"+i);
}
/*if (vn.endsWith(i, "< test")){
System.out.println(" good ");
}else
System.out.println(" bad ");*/
}
}
}
Попробуйте
//book[title/@lang = 'it']
Это гласит:
элементы книги
заголовок
lang
"it"
Вы можете найти это полезным - это статья Рональда Бурре под названием «XPath в пяти абзацах» .
Но, честно говоря, // book [title [@ lang = 'it']]
и приведенное выше должно быть эквивалентным, если только ваш движок XPath не имеет "проблем". Таким образом, это может быть что-то в коде или образце XML, который вы нам не показываете - например, ваш образец представляет собой фрагмент XML. Может быть, у корневого элемента есть пространство имен, и вы не учитываете это в своем запросе? И вы только сказали нам, что это не сработало, но не сказали, какие результаты вы получили.