Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / oracle.xml.parser.v2, XPath и символы < в значении атрибутов / 7 сообщений из 7, страница 1 из 1
20.03.2013, 18:05:36
    #38191918
Andriy Dmytruk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
oracle.xml.parser.v2, XPath и символы < в значении атрибутов
Добрый день, господа,
Столкнулся с следующей проблемой.

На входе имею следующий XML:
Код: xml
1.
2.
3.
4.
5.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myxml>
   <element id="qqq&lt;T&gt;www">
   </element>
</myxml>



Делаю попытку найти элемент используя XPath:
Код: xml
1.
//*[@id="qqq&lt;T&gt;www"]



Соответственно ничего не находиться.
На входе для поиска используется "qqq<T>www" значение id атрибута. Но имеющаяся программа
Код: xml
1.
2.
производит преобразование
символов '<' и '>' в '&lt;' и '&gt;' последовательности

, повлиять без грязного вмешательства на это невозможно и принимается за должное.

Но в то же время (для теста) используя XPath
Код: xml
1.
//*[@id="qqq<T>www"]

нужный элемент находиться.

Вопрос к знатокам: возможно ли подсказать парсерам в XPath
Код: xml
1.
выполнять преобразование "&lt;", "&gt;" последовательностей в '<' и '>' символы

?

Сам код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
import java.io.IOException;
import java.io.StringReader;

import oracle.xml.parser.v2.DOMParser;
import oracle.xml.parser.v2.XMLDocument;
import oracle.xml.parser.v2.XMLElement;

import org.w3c.dom.NodeList;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;


public class XMLTest2 {

	public static final String XML_STRING =
					"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"
					+ "<myxml><element id=\"qqq&lt;T&gt;www\"></element></myxml>";
	
	private static DOMParser getDOMParser() throws Exception {
		final DOMParser parser = new DOMParser();
		parser.setEntityResolver(new EntityResolver() {	
			@Override
			public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
				return null;
			}
		});
				parser.setPreserveWhitespace(false);
		parser.parse(new StringReader(XML_STRING));
		return parser;
	}
	
	public static void main(String[] args) throws Exception {
		System.out.println(XML_STRING);
		final DOMParser domParser = getDOMParser();
		final XMLDocument document = domParser.getDocument();
	    final XMLElement rootElement = (XMLElement)document.getDocumentElement();
	    
	    final NodeList nodeListA = rootElement.selectNodes("//*[@id=\"qqq&lt;T&gt;www\"]");
		System.out.println("nodeListA length: " + nodeListA.getLength());

	    final NodeList nodeListB = rootElement.selectNodes("//*[@id=\"qqq<T>www\"]");
		System.out.println("nodeListB length: " + nodeListB.getLength());
		
		System.out.println("attributeValue: " + rootElement.getFirstChild().getAttributes().getNamedItem("id").getNodeValue());
	}
}



и sysout:

Код: xml
1.
2.
3.
4.
5.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myxml><element id="qqq&lt;T&gt;www"></element></myxml>
nodeListA length: 0
nodeListB length: 1
attributeValue: qqq<T>www



спасибо
...
Рейтинг: 0 / 0
20.03.2013, 18:15:44
    #38191937
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
oracle.xml.parser.v2, XPath и символы &lt; в значении атрибутов
Andriy Dmytruk,
тут пишем, тут рыбу заворачиваем. Непонятно.
В именах элементов нельзя писать некоторые символы. Значит их надо:
- String.Replace(xml) до записи в XML потом обратно.
- перекодировать в base64
- засунуть в секцию Data
авторВопрос к знатокам: возможно ли подсказать парсерам в XPath
сам парсер только ищет и ничегоне преобразовывает. Проще строку поиска преобразовать.
...
Рейтинг: 0 / 0
20.03.2013, 18:24:00
    #38191950
Andriy Dmytruk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
oracle.xml.parser.v2, XPath и символы &lt; в значении атрибутов
т.е. парсер берет значение атрибута, которое будет
Код: xml
1.
qqq<T>www


и делать String#equals cо значением
Код: xml
1.
qqq&lt;T&gt;www


?

Тогда у меня есть еще один вопрос:
можно ли какими-то параметрами указать парсеру не преобразовывать в значениях атрибутов и элеметов спец символы (например < в ? l t ; (без пробелов)) при вызове Node#.getNodeValue() ?
...
Рейтинг: 0 / 0
20.03.2013, 18:32:41
    #38191962
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
oracle.xml.parser.v2, XPath и символы &lt; в значении атрибутов
Andriy Dmytruk,

Не понятно что именно у вас вызывает затруднение
запись вида
<element id="qqq<T>www">
значит что id имеет значение qqq<T>www.
Всё логично и работает верно.
...
Рейтинг: 0 / 0
20.03.2013, 18:33:55
    #38191966
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
oracle.xml.parser.v2, XPath и символы &lt; в значении атрибутов
Andriy DmytrukТогда у меня есть еще один вопрос:
можно ли какими-то параметрами указать парсеру не преобразовывать в значениях атрибутов и элеметов спец символы (например < в ? l t ; (без пробелов)) при вызове Node#.getNodeValue() ?
Зачем??? XPath ищет вам значение, которое вы просите.
...
Рейтинг: 0 / 0
20.03.2013, 18:35:57
    #38191969
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
oracle.xml.parser.v2, XPath и символы &lt; в значении атрибутов
Blazkowicz,
у него служебные символы в данных <
Символы разметки
http://ru.wikipedia.org/wiki/XML
AFAIK могут быть проблемы. Хоть они и экранированы кавычками.
...
Рейтинг: 0 / 0
20.03.2013, 18:44:57
    #38191988
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
oracle.xml.parser.v2, XPath и символы &lt; в значении атрибутов
Petro123у него служебные символы в данных <
Символы разметки
http://ru.wikipedia.org/wiki/XML
AFAIK могут быть проблемы. Хоть они и экранированы кавычками.
Спасибо, кэп.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / oracle.xml.parser.v2, XPath и символы &lt; в значении атрибутов / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]