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

Вниз

php и xml   Найти похожие ветки 

 
xayam ©   (2007-10-23 14:03) [0]

такой php-код, в параметре $_GET["n"] передается имя xml-файла
<body bgcolor="#f2f0f0" leftmargin="0" topmargin="0" marginheight="0" marginwidth="0">
<br />
<blockquote>
<br />
<h4><img height="15" alt="" src="icon.gif" width="15" border="0" />
<?php  
     $dom = new domDocument();
     $dom->load("xml/".$_GET["n"].".xml");
     $root = $dom->documentElement;
  echo $root->getAttribute("tit");
     $nodeList = $root->childNodes;
?>
</h4><br />  
<?php
     function getContent($node)
  {
       //???
    return $node->textContent;
  }
     for ($child = $root->firstChild; $child; $child = $child->nextSibling)  
     if ($child->nodeName == "msg")  
       echo "<br />".getContent($child->firstChild->nextSibling)."  (<font class="date">".$child->attributes->getNamedItem("dt")->textContent."</font>)&nbsp<SMALL>[".$child->attributes->getNamedItem("i")->textContent."]</SMALL><p style="MARGIN-LEFT: 20px; MARGIN-RIGHT: 20px">".getContent($child->lastChild->previousSibling)."<br /><br /><hr />";          
?>
</blockquote>
</body>


 
xayam ©   (2007-10-23 14:03) [1]

проблема в том, что textContent возвращает содержимое узла без внутренних узлов (обрезаются все ссылки из xml-документа, переводы строки и т.д.). Как быть?
Результат выполнения скрипта здесь -http://xayam.by.ru/Images/example.htm


 
clickmaker ©   (2007-10-23 14:11) [2]


> [1] xayam ©   (23.10.07 14:03)

а как xml выглядит? и что в итоге должно получиться?


 
xayam ©   (2007-10-23 14:14) [3]

примерно так
<trd dsc="Основная" prd="0-1078488826" nxt="0-1078485306" idx="main.xml" dt="05.03.04 18:28" tit="TMemo" vd="">
<msg dt="05.03.04 16:07" i="0">
<lgn>tria <a href="http://www.delphimaster.ru/cgi-bin/anketa.pl?id=1060699165" target="_blank">&#xA9;</a></lgn>
<txt>Очищаю Memo и добавляю в него строки. После этого прокрутка устанавливается в крайнее нижее положение и я вижу только нижнюю часть текста, а надо верхнюю. Команда memo.SelStart:=0 не помогает. Что можно сделать?</txt>
</msg>
<msg dt="05.03.04 16:19" i="1">
<lgn>Юрий Зотов <a href="http://www.delphimaster.ru/cgi-bin/anketa.pl?id=1035230938" target="_blank"><font color="#3399FF">&#xA9;</font></a></lgn>
<txt>Наверное, что-то типа<br/>SendMessage(Memo1.Handle, EM_LINESCROLL, 0, -Memo1.Lines.Count)</txt>
</msg>
<msg dt="05.03.04 16:26" i="2">
<lgn>WebErr <a href="http://www.delphimaster.ru/cgi-bin/anketa.pl?id=1075210392" target="_blank">&#xA9;</a></lgn>
<txt><br/>> Команда memo.SelStart:=0 не помогает.<br/><br/>Это команда вообще-то для выделения текста по ходу выполнения программы, используется вместе с SelEnd. См. help.</txt>
</msg>
...


 
xayam ©   (2007-10-23 14:15) [4]


> и что в итоге должно получиться?

в итоги должно быть похоже на эту ветку, со всеми ссылками и т.д.


 
clickmaker ©   (2007-10-23 14:21) [5]

вообще-то в xml недопустимы спецсимволы <, >
если ссылка, то что-то типа

<a href="http://www.delphimaster.ru/cgi-bin/anketa.pl?id=1075210392" target="_blank">©</a>


 
clickmaker ©   (2007-10-23 14:23) [6]

короче < это  & lt;  >  это & gt;  (без пробела между & и gt)


 
xayam ©   (2007-10-23 14:25) [7]

ну может быть и так, но php же нормально его загружает


 
clickmaker ©   (2007-10-23 14:28) [8]

<a href - в контексте xml-парсера - это обычный нод с именем "a", а не html-ссылка


 
Reindeer Moss Eater ©   (2007-10-23 14:32) [9]

а может проще натравить на этот xml xls?


 
Reindeer Moss Eater ©   (2007-10-23 14:33) [10]

в смысле xsl


 
xayam ©   (2007-10-23 14:38) [11]


> clickmaker ©   (23.10.07 14:28) [8]

а можно как-нибудь получить в виде строки этот нод (элемент) ?


 
clickmaker ©   (2007-10-23 14:43) [12]


> [11] xayam ©   (23.10.07 14:38)

search-replace по < и > в содержательной части нодов


 
xayam ©   (2007-10-23 15:02) [13]

не работате что-то ((
function getContent($node)
{
  for ($mystr = "",$i = $node->firstChild; $i; $i = $i->nextSibling)
 {
    $mystr = $mystr.str_replace("<", "<", $i->nodeValue);
    $mystr = $mystr.str_replace(">", ">", $i->nodeValue);
}
    return $mystr;
}


 
xayam ©   (2007-10-23 15:03) [14]

опс & lt; & gt; конечно


 
xayam ©   (2007-10-23 15:05) [15]

точнее так
     function getContent($node)
  {
        for ($mystr = "",$i = $node->firstChild; $i; $i = $i->nextSibling)
  {
    $mystr = str_replace("<", "& lt;", $i->nodeValue);
    $mystr = str_replace(">", "& gt;", $i->nodeValue);
  }
    return $mystr;
  }


 
clickmaker ©   (2007-10-23 15:05) [16]


> [13] xayam ©   (23.10.07 15:02)

в исходном xml надо такую замену делать < на & lt;  > на & gt;


 
clickmaker ©   (2007-10-23 15:07) [17]

БЕЗ пробела между & и lt
это я здесь так пощу, потому что браузер иначе покажет как <


 
PEAKTOP ©   (2007-10-23 15:07) [18]

> такой php-код, в параметре $_GET["n"] передается имя xml-файла

Любим оставлять дыры для include/injection - атак ?


 
xayam ©   (2007-10-23 15:09) [19]


> clickmaker ©   (23.10.07 15:07) [17]
> БЕЗ пробела между & и lt
> это я здесь так пощу, потому что браузер иначе покажет как
> <

я понял, но все равно что-то неправильно работает


 
clickmaker ©   (2007-10-23 15:11) [20]


> [19] xayam ©   (23.10.07 15:09)

исходный xml должен так выглядеть. Содержательная часть, данные то есть, не должны иметь спецсимволов. В процессе парсинга уже поздно заменять


 
xayam ©   (2007-10-23 16:32) [21]


> Reindeer Moss Eater ©   (23.10.07 14:32) [9]
> а может проще натравить на этот xml xls?

да спасибо так гораздо проще))



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

Текущий архив: 2007.11.25;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
15-1192991116
JSman
2007-10-21 22:25
2007.11.25
Как защитить свое приложение от крэков?


2-1193939277
Dark
2007-11-01 20:47
2007.11.25
Фон рабочего стола


1-1189078540
den303_work
2007-09-06 15:35
2007.11.25
Создать контрол с заранее неизвестным классом


15-1192631024
Реактор
2007-10-17 18:23
2007.11.25
Проблема с печатью рисунка


4-1178613598
Iv_
2007-05-08 12:39
2007.11.25
Регион, процедура прорисовки окна