powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как получить xml без кодов
17 сообщений из 17, страница 1 из 1
Как получить xml без кодов
    #39687484
SergeyAKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь создать строку с xml

Код: 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.
  public static String  prepareXml() throws Exception {
      Document document;
      Element elRoot;
      //Element elParameters;
      String  xmlOut;    
      try {
        DocumentBuilderFactory factory  = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        document = factory.newDocumentBuilder().newDocument();    
        elRoot = document.createElement("request");
        elRoot.setAttribute("id", "1234"); //Integer.toString(id));
        elRoot.setAttribute("user", "user");
        elRoot.setAttribute("user1", "йцукенгшщ");
        document.appendChild(elRoot);    

        //отформатировать
        StringWriter stringWriter = new StringWriter();            
        Transformer transformer = TransformerFactory.newInstance().newTransformer();            
        //форматирует в удобочитаемый вид
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "false"); 
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");   
        transformer.setOutputProperty(OutputKeys.ENCODING, "windows-1251");
        transformer.transform(new DOMSource(document), new StreamResult(stringWriter)); 

        xmlOut =  stringWriter.toString();
                    
                    

        return xmlOut;
      
      }catch (Exception e){
          dbg("Error:"+e.getMessage());
          xmlOut = e.getMessage();
          throw e;
      }
      
      //try {



  }



но в итоге вместо кириллицы получаю коды

Код: xml
1.
2.
3.
<?xml version="1.0" encoding="windows-1251"?>
<request id="79" user="ESFL" user1="uiyuy&#1097;&#1110;&#1107;&#1098;&#1093;&#1101;&#1091;&#1112;&#1113;">
</request



запускается из под Oracle 11
Код: plaintext
1.
2.
3.
NLS_LANGUAGE=	AMERICAN
NLS_TERRITORY=	AMERICA
NLS_CHARACTERSET=	CL8MSWIN1251
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39687545
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyAKa,
Удали лишнее в коде, форматирование, атрибуты и т.д.
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39687576
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю.

Теоретически стандарт XSL описывает disable-output-escaping. но это слишком уж "топором". Т.к. и escaping служебных символов будет отключен.
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39687587
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
У него скорее простейший случай без экранирования служебных надо.
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39687594
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда боюсь, вопрос в том, какой именно Transformer и библиотека используется. В данном случае, авторы библиотеки "так видили" well formed xml. В целом, соответствует стандарту.

В свое время с Oracle XML намучался, у них тоже было "нетрадиционное" поведение при форматирование XML. В результате пришлось плюнуть и с XML работать просто как с двоичными данными ((((
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39687654
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

Я добивался чтобы на 2 клика он открывался в Ослике.
И читался по русски).
Значит валидный)
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39687703
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да, Ваш результирующий документ кривой до жути.

Подозреваю, Вы заранее русские буквы в не верной кодировке впихнули. Тут только смотреть, что у Вас в среде разработки выбрано в качестве codepage для исходного кода и как компилируете.

Скомпилировал в своем Eclipse со стандартными библиотеками, Ваша проблема не повторилась.


Код: 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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
package test_jvm;

import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class TextXML {
	 public static String  prepareXml() throws Exception {
	      Document document;
	      Element elRoot;
	      //Element elParameters;
	      String  xmlOut;    
	      try {
	        DocumentBuilderFactory factory  = DocumentBuilderFactory.newInstance();
	        factory.setNamespaceAware(true);
	        document = factory.newDocumentBuilder().newDocument();    
	        elRoot = document.createElement("request");
	        elRoot.setAttribute("id", "1234"); //Integer.toString(id));
	        elRoot.setAttribute("user", "user");
	        elRoot.setAttribute("user1", "йцукенгшщ");
	        document.appendChild(elRoot);    

	        //отформатировать
	        StringWriter stringWriter = new StringWriter();            
	        Transformer transformer = TransformerFactory.newInstance().newTransformer();            
	        //форматирует в удобочитаемый вид
	        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "false"); 
	        transformer.setOutputProperty(OutputKeys.INDENT, "yes");   
	        transformer.setOutputProperty(OutputKeys.ENCODING, "windows-1251");
	        transformer.transform(new DOMSource(document), new StreamResult(stringWriter)); 

	        xmlOut =  stringWriter.toString();
	                    
	                    

	        return xmlOut;
	      
	      }catch (Exception e){
//	          dbg("Error:"+e.getMessage());
	          xmlOut = e.getMessage();
	          throw e;
	      }
	      
	      //try {



	  }
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		System.out.println( prepareXml() );
	}

}


Код: sql
1.
2.
<?xml version="1.0" encoding="windows-1251" standalone="no"?>
<request id="1234" user="user" user1="йцукенгшщ"/>


...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39687705
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Черт, не посмотрел, что вместо автора топика Petro123 ответил.

У автора в первом посте код один, а результат от совсем другого кода. Там даже атрибут user (без русских букв) не совпадает.
В коде elRoot.setAttribute("user", "user");
а в результате user="ESFL"
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39687815
SergeyAKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть проблемы от этого не меняется

Код: plaintext
1.
2.
3.
4.
<?xml version="1.0" encoding="windows-1251"?>
<request id="1234" user="user" user1="щіѓъхэујљ">
</request>

...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39687816
SergeyAKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм... криво, но буковки подставились. Хотя все было в кодах
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39687863
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
щіѓъхэујљ
щіѓъхэујљ

Это одно и то же. Достаточно открыть первое в firefox и можно увидеть второе. Firefox видит xml entities и правильно их декодирует. Фактически это правильный xml, но читать такой неудобно.
Есть статейка на w3c про эти escape entities.
Просто в зависимости от используемой библиотеки есть строгие и нестрогие xml парсеры.
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39687873
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
&#1097;&#1110;&#1107;&#1098;&#1093;&#1101;&#1091;&#1112;&#1113;
щіѓъхэујљ



Вообщем считается что наиболее безопасно если в xml только ascii символы. Поэтому даже есть библиотека owasp esapi котороя может весь xml в entity перекодировать все что не ascii.
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39688343
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чего не получается у автора, мне разбираться лень. Но в подобных случаях я при выводе применяю секции CDECL для строк на русском языке или которые могут содержать специальные символы . Это препятсвует их неправильном чтению или показу программами. Как добавить секцию CDECL - искать в описании используемой библиотеки получения XML.
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39688346
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyAKa,

Можете протестировать конвертор json в xml в соседней ветке. 21643425

С уважением, Валентин
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39688358
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan MCDECL для строк на русском
Вот это
encoding="windows-1251"
достаточно.
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39688370
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
encoding="windows-1251"
достаточно.

Недостаточно, если читающая этот XML программа ожидает кодировку UTF-8 или если русский текст содержит специальные символы, в том числе и " (что вполне вероятно в русском тексте).
...
Рейтинг: 0 / 0
Как получить xml без кодов
    #39688411
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan MНедостаточно, если читающая этот XML программа ожидает кодировку UTF-8
а зачем писать программы которые ожидают кодировку и не проверяют что в первой строке стоит:
encoding="windows-1251"
Partisan Mили если русский текст содержит специальные символы, в том числе и " (что вполне вероятно в русском тексте).
А ты ниже текст вставь в файл demo.xml и сделай 2 клика чтобы в Ослике открылся.
Что видим?
...
Ну а если припёрло, то экранируй:
" "
' '
< <
> >
& &

к сабжу экранирование не относится.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" encoding="windows-1251"?> 
<serverpage> 
<sessions> 
    <plr> 
      <name>ООО "Рога и копыта"</name>
      <race>5</race> 
      <class>5</class> 
      <gender>0</gender> 
      <pvprank>0</pvprank> 
      <level>70</level> 
      <map>530</map> 
    </plr> 
  </sessions> 
</serverpage> 
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как получить xml без кодов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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