Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.043 c
2-1174207099
Лебедев
2007-03-18 11:38
2007.04.08
График


15-1173686804
Vlad Oshin
2007-03-12 11:06
2007.04.08
Хорошо, очередная рац.идея :) Шляпа.


2-1174254174
uranius
2007-03-19 00:42
2007.04.08
как грамотно отправить xml запрос по http ?


1-1171379304
Вопрошающий
2007-02-13 18:08
2007.04.08
Новые диалоги Vista для открытия и сохранения файлов


15-1173902441
eXPell
2007-03-14 23:00
2007.04.08
От нечего делать....