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

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


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


?

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

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


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