Форум: "Прочее";
Текущий архив: 2007.11.25;
Скачать: [xml.tar.bz2];
Вниз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>) <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">©</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">©</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">©</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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c