Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Вниз

XMLDocument преврашает знаки тега <> в &amp;laquo;&amp; lt;&amp;raquo;   Найти похожие ветки 

 
Kolan ©   (2007-03-14 19:28) [0]

Зачем ему это?
Я вообще по су ти хочу добавить текст с тегами, и чтобы он не превратил теги в &laquo;& lt;&raquo; , создал соответствующие ноды&#133


 
Kolan ©   (2007-03-14 19:37) [1]

> , создал

, a создал


 
Kolan ©   (2007-03-14 19:57) [2]

Главное если так:
FXMLMessage.XML.Text := "<MESSAGE><TITLE></TITLE><BODY></BODY></MESSAGE>";
То все нормально &#151; почему?


 
palva ©   (2007-03-14 20:02) [3]

> Я вообще по су ти хочу добавить текст с тегами
Текст с тэгами это уже не текст, в смысле не свойство text, а свойство xml.
Можно добавлять дочерние узлы, с типами TEXT ELEMENT и т. д.


 
Kolan ©   (2007-03-14 20:08) [4]

Еще раз вот что я хочу:
1.Есть документ:
FXMLMessage

2.Делаю:
FXMLMessage.XML.Text := "<MESSAGE><TITLE></TITLE><BODY></BODY></MESSAGE>";

Теперь хочу в TITLE засунуть, допустим, &laquo;фывфывфы <T>asdasd</T>asdasd&raquo;.
Пытаюсь так:
FXMLMessage.ChildNodes[0].ChildNodes.FindNode(rsMessageBody).Text := "фывфывфы <T>asdasd</T>asdasd";
Он заменяет теги&#133

Как надо?


 
Kolan ©   (2007-03-14 20:10) [5]

Те в итоге должно быть:
<MESSAGE><TITLE>фывфывфы <T>asdasd</T>asdasd</TITLE><BODY></BODY></MESSAGE>

А у меня:
<MESSAGE><TITLE>фывфывфы <T&gtasdasd</T&gtasdasd</TITLE><BODY></BODY></MESSAGE>


 
Eraser ©   (2007-03-14 20:10) [6]

> [4] Kolan ©   (14.03.07 20:08)


> Теперь хочу в TITLE засунуть, допустим, «фывфывфы <T>asdasd</T>asdasd».

и правильно что превращает, т.к. <> запрещены внутри тегов, да и иногда не только внутри.
к примеру в xsl <> можно указывать только для тэгов.


 
Kolan ©   (2007-03-14 20:11) [7]

А у меня:
<MESSAGE><TITLE>фывфывфы & lt;T& gtasdasd& lt;/T& gtasdasd</TITLE><BODY></BODY></MESSAGE>


 
Kolan ©   (2007-03-14 20:14) [8]

> и правильно что превращает, т.к. <> запрещены внутри тегов

Главное TITLE внутри MESSAGE можно, а T внутри TITLE &#151; нельзя?


 
palva ©   (2007-03-14 20:17) [9]

Попробуй
FXMLMessage.ChildNodes[0].ChildNodes.FindNode(rsMessageBody).Xml := "фывфывфы <T>asdasd</T>asdasd";

но не гарантирую.


 
Kolan ©   (2007-03-14 20:19) [10]

[Pascal Error] KDMCMessageBuilder.pas(85): E2129 Cannot assign to a read-only property


 
Eraser ©   (2007-03-14 20:24) [11]

> [10] Kolan ©   (14.03.07 20:19)

мдя.. по видимому этот компонент позволяет вставлять ноды только явно, т.е. через свои методы, т.о. <TITLE> должен быть child нодом.


 
Kolan ©   (2007-03-14 20:24) [12]

Есть конечно вариант:
<MESSAGE><TITLE>%s</TITLE><BODY></BODY></MESSAGE>
А потом Format"ом, но хочется понять где я не прав&#133


 
Kolan ©   (2007-03-14 20:25) [13]

> этот компонент

Это IXMLDocument


> т.е. через свои методы, т.о. <TITLE> должен быть child нодом.

Честно не понял&#133


 
palva ©   (2007-03-14 20:29) [14]

Все равно браузер на тэги внутри TITLE правильно реагировать не будет.


 
palva ©   (2007-03-14 20:34) [15]

> Честно не понял…
Сформировать TITLE как элемент и добавить его в MESSAGE как Child, предварительно удалив старый TITLE


 
Zeqfreed ©   (2007-03-14 20:49) [16]

Тут два варианта:
1. Вы хотите добавить внутрь нода TITLE нод T. Тогда и надо оперировать на уровне нодов, а не текста.
2. Вы хотите просто добавить текстовую последовательность, содержащую символы < и >. Тогда, если вам принципиально, чтобы они содержались внутри xml-документа в первозданном виде, то их надо поместить внутри секции CDATA.

Компонент ведет себя правильно.


 
Kolan ©   (2007-03-14 21:56) [17]

> Все равно браузер на тэги внутри TITLE правильно реагировать
> не будет.

А причем тут браузер?


> Сформировать TITLE как элемент и добавить его в MESSAGE
> как Child, предварительно удалив старый TITLE

Да так и думал сделать.


> Вы хотите просто добавить текстовую последовательность,
> содержащую символы < и >.

Не этого не хочу.


> Вы хотите добавить внутрь нода TITLE нод T.

Понятно вроде&#133


>
> Компонент ведет себя правильно.

Я не сомневаюсь :)


 
Reindeer Moss Eater ©   (2007-03-15 09:36) [18]

Чего вы паритесь?
Не ваша это проблема как символы тэгов хранятся внутри нода или атрибута.
Записал ы xml символ тэга - считал из xml символ тэга.


 
palva ©   (2007-03-15 09:40) [19]

> Reindeer Moss Eater ©   (15.03.07 09:36) [18]
> Не ваша это проблема как символы тэгов хранятся внутри нода или атрибута.

Так формально он ведь не символы хочет записать. Он хочет, чтоб внутри элемента появились новые ноды.


 
Reindeer Moss Eater ©   (2007-03-15 09:48) [20]

да нет, почему же.

вообще по сути хочу добавить текст с тегами


 
Reindeer Moss Eater ©   (2007-03-15 10:10) [21]

2.Делаю:
FXMLMessage.XML.Text := "<MESSAGE><TITLE></TITLE><BODY></BODY></MESSAGE>";


А вот не надо так делать.
Хочешь сам формировать тело документа - пиши свой xml документ.
А если пользуешься IXMLDocument - используй его методы.


 
palva ©   (2007-03-15 10:17) [22]

> вообще по сути хочу добавить текст с тегами
Разве так? Тогда у вас все правильно получается. Эти символы ДОЛЖНЫ маскироваться. А при чтении любой программой, которая знает формат xml, эти символы должны восстанавливаться.


 
palva ©   (2007-03-15 10:19) [23]

Вы же писали вначале, что хотите, чтобы он
> создал соответствующие ноды…
Значит это уже не текст будет.


 
HomeUser   (2007-03-15 12:01) [24]

Я когда мне в xml нужно добавить какойто контент содержащий теги, запихиваю это дело в CDATA (<![CDATA[......]]>, незнаю как это сделано в FXMLMessage, потому как с такой штукой не встречался (если же все это тесто потом идет через xsl в браузер, а преформатированный текст содержит HTML теги, то нужно достать этот тескт таким макаром: <xsl:value-of select="text" disable-output-escaping="yes"/>)

Вообщем может поможет.....


 
Kolan ©   (2007-03-15 18:32) [25]

> Так формально он ведь не символы хочет записать. Он хочет,
> чтоб внутри элемента появились новые ноды.

Да. ВОт этого я хотел...


 
Kolan ©   (2007-03-15 20:08) [26]

Подскажите что прочесть по XML + Delphi, а то вопросов куча и видно все дурацкие...

Вот если есть:
<BODY>ааа  < CODE >"ббббб"< /CODE > ввввв "гггггг"</BODY>

Как получить
ааа ввввв "гггггг"
То есть без  < CODE >"ббббб"< /CODE >


 
Kolan ©   (2007-03-15 21:23) [27]

Хоть скажите возможно этот в принципе или нет...


 
palva ©   (2007-03-15 22:09) [28]

Вы предъявили неправильно составленный элемент BODY. Символы " недопустимы в текстах. Их надо заменять на &amp;quot; Далее, после < сразу должно идти имя элемента (без пробела).

А вообще возможно, конечно.
Читать можно первоисточник на сайте W3C.org или любую книжку по XML. Даже на Delphimaster есть какая-то статья.


 
palva ©   (2007-03-16 00:07) [29]

Вот я попробовал создать файл на Turbo Delphi.
Пытался попробовать разные возможности.

procedure TForm1.FormCreate(Sender: TObject);
var
 e, n: IXMLNode;
begin
 XMLDocument1.Active := True;
 XMLDocument1.Encoding := "Windows-1251";
 XMLDocument1.AddChild("BODY", "");
 XMLDocument1.ChildNodes[1].Text := "Мой текст";
 e := XMLDocument1.DocumentElement.AddChild("B", "");
 e.Text := "elementarnyj text";
 n := XMLDocument1.CreateNode("b478925fdgf", ntText);
 XMLDocument1.DocumentElement.ChildNodes.Add(n);
 XMLDocument1.SaveToFile("ddd.xml");
end;

Получился такой ddd.xml

<?xml version="1.0" encoding="Windows-1251"?>
<BODY>Мой текстelementarnyj textb478925fdgf</BODY>

который корректно открывается эксплорером.


 
palva ©   (2007-03-16 00:10) [30]

На форуме тэг интерпретировался как "полужирный". Надо было изобразить так:
<BODY>Мой текстelementarnyj textb478925fdgf</BODY>


 
palva ©   (2007-03-16 00:12) [31]

Да, все равно не получилось.


 
Kolan ©   (2007-03-16 11:41) [32]

> Далее, после < сразу должно идти имя элемента (без пробела)
> .


> На форуме тэг интерпретировался как "полужирный".

Поэтому и пробелы... :)


> Получился такой ddd.xml

Во-во то что надо.
<BODY>Мой текст< B >elementarnyj text< /B >b478925fdgf</BODY>

Как теперь получить Мой текст b478925fdgf. Те тот текст что лежит в BODY но не в B

PS
 Понятно что пробелов в < B > нет, это из-за форума...


 
Kolan ©   (2007-03-16 12:15) [33]

> Читать можно первоисточник на сайте W3C.org или любую книжку
> по XML

Я читал про сам XML но там нет ничего про то как работать из программ...


 
palva ©   (2007-03-16 12:54) [34]

Тэг B я заменил другим.

procedure TForm1.FormCreate(Sender: TObject);
begin
 XMLDocument1.XML.Add
 ("<?xml version="1.0" encoding="Windows-1251"?>");
 XMLDocument1.XML.Add
 ("<BODY>Мой текст<BQQQ>elementarnyj text</BQQQ>b478925fdgf</BODY>");
 XMLDocument1.Active := True;
 Label1.Caption := XMLDocument1.DocumentElement.ChildNodes[0].Text +
 XMLDocument1.DocumentElement.ChildNodes[2].Text;
end;


 
palva ©   (2007-03-16 13:01) [35]

Пробел между текстами нужно вставить + " "


 
Kolan ©   (2007-03-16 13:11) [36]

ААА те в ноде BODY есть 3 нода
1. Мой текст с именем #text
2. <BQQQ>elementarnyj text</BQQQ> c именем BQQQ
3. и b478925fdgf с именем #text

Вот чего я не понимал. Я непонимал что это за #text


Кажется теперь дошло :)


 
palva ©   (2007-03-16 13:18) [37]

В свою очередь второй нод типа "элемент" содержит дочерний нод типа "текст". Но если мы берем Text от какого-нибудь разветвленного элемента, то по всему дереву дочерних нодов тексты будут собраны и сцеплены.


 
Kolan ©   (2007-03-16 14:21) [38]

> Но если мы берем Text от какого-нибудь разветвленного элемента,
> то по всему дереву дочерних нодов тексты будут собраны
> и сцеплены.

То есть как?
Если например попросить BODY.Text (ну понятно что BODY - это нод), то скажет что это не текстовый элемент...


 
Reindeer Moss Eater ©   (2007-03-16 14:52) [39]

Еще раз для тех кто в танке.
Не надо самому формировать боди xml документа.
Записывай в NodeValue все что хочешь, и считаешь обратно оттуда все что хочешь.
А если сам решил формировать тело xml, то нефик пытаться заставить парсить свое творение тех, кто соблюдает стандарты.


 
Kolan ©   (2007-03-16 15:00) [40]

> Еще раз для тех кто в танке.

:) это про меня :)

> А если сам решил формировать тело xml, то нефик пытаться
> заставить парсить свое творение тех, кто соблюдает стандарты.

Так ведь парситься же, и браузер нормально отображает. Те документ является правильно оформленным...



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.042 c
15-1173955310
@!!ex
2007-03-15 13:41
2007.04.08
3D изображение не на плоскости


2-1174373246
JIuSS
2007-03-20 09:47
2007.04.08
Воод чисел с разделителями тысяч


2-1174339057
Malik
2007-03-20 00:17
2007.04.08
Помогите со StringGrid oм


2-1174014038
Gromozeka
2007-03-16 06:00
2007.04.08
Закрытие форм


4-1164101376
Cyrax
2006-11-21 12:29
2007.04.08
Оптим. организация асинхр. чтения COM-порта в отельном потоке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский