Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   чтение xml без жкуиерити (https://javascript.ru/forum/misc/61523-chtenie-xml-bez-zhkuieriti.html)

leon2009sp 22.02.2016 10:13

чтение xml без жкуиерити
 
Здравствуйте! можно простой примерчик чтение файла xml;
Код:

<?xml version="1.0" encoding="utf-8"?>
<category>
    <book name="kat1">
        <page name="111.php">data1</page>
        <page name="222.php">data2</page>
        <page name="333.php">data3</page>
        <page name="444.php">data4</page>
    </book>
    <book name="kat2">
        <page name="111.php">data5</page>
        <page name="222.php">data6</page>
        <page name="333.php">data7</page>
        <page name="444.php">data8</page>
    </book>
</category>

чтобы можно было бы запихнуть в select box
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml " lang="en" xml:lang="en">
<head>
  <title>dinamic select</title>
  <meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
  <meta http-equiv="Content-Language" content="ru-ru" />
<style type="text/css">
* { margin: 0; padding: 0; }
#main { position: relative; left: 100px; top: 100px; }
</style>
<script type="text/javascript"><!--
var mv = new Array();
mv[0] = Array('выберите город');
mv[1] = Array('111','Белорусский','Казанский','Киевский','Курский','Октябрьский','Павелецкий','Рижский','Савеловский','Ярославский');
mv[2] = Array('222','Балтийский','Варшавский','Витебский','Ладожский','Московский','Финляндский');
function changetown() {
    var val1 = parseInt(document.forms[0].city.value); 
    mva = mv[val1];
    recity(); }
function recity() {
    var sselect = document.forms[0].vokzal;
    for(i = sselect.length; i > 0; i--) { sselect.options[i] = null; } 
    opt = new Array; 
    for(i = 0; i < mva.length; i++) { sselect.options[i] = new Option(mva[i], (i)); }}
//-->
</script>
</head>
<body><div id="main">
<form>
<select name="city" onchange="changetown();">
<option value="0"></option>
<option value="1">Москва</option>
<option value="2">Санкт-Петербург</option>
</select>
<select name="vokzal"><option>выберите город</option></select>
</form>
</div>
</body></html>

destus 22.02.2016 11:14

Цитата:

Сообщение от leon2009sp (Сообщение 408802)
Здравствуйте! можно простой примерчик чтение файла xml;
Код:

<?xml version="1.0" encoding="utf-8"?>
<category>
    <book name="kat1">
        <page name="111.php">data1</page>
        <page name="222.php">data2</page>
        <page name="333.php">data3</page>
        <page name="444.php">data4</page>
    </book>
    <book name="kat2">
        <page name="111.php">data5</page>
        <page name="222.php">data6</page>
        <page name="333.php">data7</page>
        <page name="444.php">data8</page>
    </book>
</category>


xPath, XSLT ну или просто навигация по DOM.
<?xml version="1.0" encoding="utf-8"?>
<category>
    <book name="kat1">
        <page name="111.php">data1</page>
        <page name="222.php">data2</page>
        <page name="333.php">data3</page>
        <page name="444.php">data4</page>
    </book>
    <book name="kat2">
        <page name="111.php">data5</page>
        <page name="222.php">data6</page>
        <page name="333.php">data7</page>
        <page name="444.php">data8</page>
    </book>
</category>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:template match="/">
        <html>
            <body>
                <xsl:for-each select="category/book">
                        <ul>
                          <xsl:value-of select="@name"/>
                          <xsl:for-each select="page">
                              <li>
                                <xsl:value-of select="." />
                              </li>
                          </xsl:for-each>
                        </ul>
                </xsl:for-each> 
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Документ без названия</title>
<style>
    li{
        padding-left : 20px;
        list-style-type : none;
    }
</style>
<script>
    function loadXMLDoc(filename) {
        if (window.ActiveXObject) {
            xhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        else {
            xhttp = new XMLHttpRequest();
        }
        xhttp.open("GET", filename, false);
        try { xhttp.responseType = "msxml-document" } catch (err) { } // Helping IE11
        xhttp.send("");
        return xhttp.responseXML;
    }
    function displayResult() {
        xml = loadXMLDoc("testXML.xml");
        xsl = loadXMLDoc("testXSL.xsl");
        // code for IE
        if (window.ActiveXObject || xhttp.responseType == "msxml-document") {
            ex = xml.transformNode(xsl);
            document.getElementById("example").innerHTML = ex;
        }
        // code for Chrome, Firefox, Opera
        else if (document.implementation && document.implementation.createDocument) {
            xsltProcessor = new XSLTProcessor();
            xsltProcessor.importStylesheet(xsl);
            resultDocument = xsltProcessor.transformToFragment(xml, document);
            document.getElementById("example").appendChild(resultDocument);
        }
    }
</script>
</head>
<body onload="displayResult()">
    <div id="example" />
</body>
</html>

leon2009sp 23.02.2016 12:28

что получилось
 
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:template match="/">	
        <html>
            <body><select><option>
                <xsl:for-each select="category/book">
                        <ul>
                          <xsl:value-of select="@name"/>
                          <xsl:for-each select="page">
                              <li>
                                <xsl:value-of select="." />				
				 </li>
                          </xsl:for-each>
                      </ul>
                </xsl:for-each> 
           </option>  </select> </body>
        </html>		
    </xsl:template>
</xsl:stylesheet>

я же правильно делаю? все изменение в xls файле?

destus 23.02.2016 12:38

leon2009sp,
Смотря что именно вы хотите сделать. Я использовал неупорядоченный список просто для примера. Если надо в select засунуть все данные из тэгов <page> то надо так
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:template match="/">	
        <html>
            <body><select>
                <xsl:for-each select="category/book/page">
                        <option>
                            <xsl:value-of select="." />	
						</option>	
                 </xsl:for-each>
            </select></body>
        </html>		
    </xsl:template>
</xsl:stylesheet>


Ещё больше инфы тут http://htmlweb.ru/xml/xslt1.php

leon2009sp 23.02.2016 15:55

select box как менять данные
 
пример в select1 висит book, а в select2 при выборе значение data1 появляются book2->page
а если выбрать data2 то в select2 появится book3 и
Код:

<?xml version="1.0" encoding="utf-8"?>
<category>
    <book name="---kat1---">
        <page name="111.php" value=1>data1</page>
        <page name="222.php" value=2>data2</page>
        <page name="333.php" value=3>data3</page>
        <page name="444.php" value=4>data4</page>
    </book>
    <book2 name="kat2">
        <page2 name="111.php" value=5>data5</page>
        <page2 name="222.php" value=6>data6</page>
        <page2 name="333.php" value=7>data7</page>
        <page2 name="444.php" value=8>data8</page>
    </book2>
    <book3 name="kat3">
        <page3 name="111.php" value=9>data9</page>
        <page3 name="222.php" value=10>data10</page>
        <page3 name="333.php" value=11>data11</page>
        <page3 name="444.php" value=12>data12</page>
    </book3>
</category>

и передача value
Код:

<xsl:value-of select="@value"/>
???
спасибо!

destus 23.02.2016 16:23

leon2009sp,
лучше на HTML показать, что именно хочется. Да и в xml если есть открывающий тэг, то обязательно должен быть закрывающий. Такие записи
<page2 name="111.php" value=5>data5</page>
неправильны.

leon2009sp 24.02.2016 05:31

select box как менять данные
 
попробую объяснить
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml " lang="en" xml:lang="en">
<head>
  <title>dinamic select</title>
  <meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
  <meta http-equiv="Content-Language" content="ru-ru" />
<style type="text/css">
* { margin: 0; padding: 0; }
#main { position: relative; left: 100px; top: 100px; }
</style>
<script type="text/javascript"><!--
var mv = new Array();
mv[0] = Array('выберите город');
mv[1] = Array('111','Белорусский','Казанский','Киевский','Курский','Октябрьский','Павелецкий','Рижский','Савеловский','Ярославский');
mv[2] = Array('222','Балтийский','Варшавский','Витебский','Ладожский','Московский','Финляндский');
function changetown() {
    var val1 = parseInt(document.forms[0].city.value); 
    mva = mv[val1];
    recity(); }
function recity() {
    var sselect = document.forms[0].vokzal;
    for(i = sselect.length; i > 0; i--) { sselect.options[i] = null; } 
    opt = new Array; 
    for(i = 0; i < mva.length; i++) { sselect.options[i] = new Option(mva[i], (i)); }}
//-->
</script>
</head>
<body><div id="main">
<form>
<select name="city" onchange="changetown();">
<option value="0"></option>
<option value="1">Москва</option>
<option value="2">Санкт-Петербург</option>
</select>
<select name="vokzal"><option>выберите город</option></select>
</form>
</div>
</body></html>

только данные нужно брать из xml
Код:

mv[0] = Array('выберите город');
mv[1] = Array('111','Белорусский','Казанский','Киевский','Курский','Октябрьский','Павелецкий','Рижский','Савеловский','Ярославский');
mv[2] = Array('222','Балтийский','Варшавский','Витебский','Ладожский','Московский','Финляндский');


leon2009sp 24.02.2016 05:35

<?xml version="1.0" encoding="utf-8"?>
<category>
    <book name="kat2">
<page2 name="111.php" value=1>data1</page2>
<page2 name="111.php" value=2>data2</page2>
    </book>
</category>
?>

такая запись правельна? закрытие xml ?>

destus 24.02.2016 09:45

leon2009sp,
Если нужна динамика, то тогда надо использовать навигацию по DOM дереву.

testXML.xml
<?xml version="1.0" encoding="utf-8"?>
<category>
    <city name="Москва">
		<station>Белорусский</station>
		<station>Казанский</station>
		<station>Киевский</station>
		<station>Курский</station>
		<station>Октябрьский</station>
		<station>Павелецкий</station>
		<station>Рижский</station>
		<station>Савеловский</station>
		<station>Ярославский</station>
	</city>
	<city name="Санкт-Петербург">
		<station>Балтийский</station>
		<station>Варшавский</station>
		<station>Витебский</station>
		<station>Ладожский</station>
		<station>Московский</station>
		<station>Финляндский</station>
	</city>
</category>


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Документ без названия</title>
<style>
    #station{
        margin-left : 150px;
    }
</style>
<script>
    function loadXMLDoc(filename) {
        if (window.ActiveXObject) {
            xhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        else {
            xhttp = new XMLHttpRequest();
        }
        xhttp.open("GET", filename, false);
        try { xhttp.responseType = "msxml-document" } catch (err) { } // Helping IE11
        xhttp.send(null);
        return xhttp.responseXML;
    }
    document.addEventListener('DOMContentLoaded', function () {
        var xml = loadXMLDoc("testXML.xml"),
            selCity = document.querySelector('#city'),
            selStation = document.querySelector('#station'),
            i;
        [].forEach.call(xml.querySelectorAll('city'), function (el) {
            selCity.add(new Option(el.getAttribute('name'), el.getAttribute('name')))
        })
        selCity.addEventListener('change', function () {
            selStation.options.length = 0 , i=0;
            [].forEach.call(xml.querySelectorAll('city[name=' + this.value + '] > station'), function (el) {
                selStation.add(new Option(el.textContent, ++i));
            })
        })
    })
</script>
</head>
<body>
    <select id="city"><option selected>Выберите город</option></select>
    <select id="station"></select>
</body>
</html>


http://pixs.ru/showimage/showpng_8266993_20819220.png

leon2009sp 05.03.2016 11:02

а почему не сработало с с дивом?
<body>
    <select id="city"><option selected>Выберите город</option></select>
    <div id="station"></div>
</body>

с инпутом тоже не выводит

destus 05.03.2016 11:05

leon2009sp,
потому что в 35 строке идет добавление опции именно в Select

leon2009sp 05.03.2016 12:23

проба с инпутом
 
selinput = document.getElementById('#station2'),i;
selinput.value (new Value(el.textContent, ++i));

нее?? :blink:
и слово Option если ставишь маленькую "о", то ничего не работает, при этому все слова заменил на меленькую о...

destus 05.03.2016 12:30

leon2009sp,
Цитата:

и слово Option если ставишь маленькую "о", то ничего не работает
ну потому что Option это имя конструктора, в JS так принято - имена конструкторов с большой буквы.
Цитата:

selinput = document.getElementById('#station2'),i;
selinput.value (new Value(el.textContent, ++i));

нет, это неправильно. Если selinput это некий input с type=text, то
selinput.value += el.textContent
и переменная i здесь не нужна.

leon2009sp 06.03.2016 04:21

если по честному то я пробывал так:
27:selInput = document.getElementById('#station2'),i;
32:selInput.value.length = 0 , i=0;
35:selInput.value += el.textContent;

с DIV тоже самое проделывал, но как я понял надо поменять еще что то :blink:

leon2009sp 06.03.2016 05:14

так тоже:
div = document.getElementById('#station2');
selCity.addEventListener('change', function () {
            div.id = 0 , i=0;
div.id += el.textContent;

leon2009sp 07.03.2016 14:23

не доходит.. :cray:
<?php 
echo "
<select id='city'><option selected>Выберите город</option></select>
$primer='#station2';
";
echo id;
?>

или здесь выбора нету? только через форму?

destus 07.03.2016 16:27

leon2009sp,
Лучше описать что конкретно надо, может помогут. Пока какие-то непонятные попытки.

leon2009sp 07.03.2016 22:55

пример скрипта
 
попробую рассказать: у меня есть файл index.php в него через #include в писаны файлы шапка.html поиск.html
index.php
<div id=inf align=center>
<div>"; include 'template/inf0.tpl'; echo "</div>
<div>"; include 'template/inf1.tpl'; echo "</div>
<div>"; //include 'template/inf2.tpl';
 echo "</div>
<div>"; include 'template/inf3.tpl'; echo "</div>
<div>"; include 'template/inf4.tpl'; echo "</div>
<div>&nbsp;</div>
<div>"; include 'template/inf5.tpl'; echo "</div>
<div>


поиск.html :write: еще не добрался. где селект выбор городов.

link.html
<?php
$xml = simplexml_load_file("xml/info.xml") or die("Error: Cannot create object");
echo "<table align=center border=0 cellpadding=8 cellspacing=8 width=80% class=link2>
<tr>";
if(!empty($xml->book1->page))
{
    $agrs = $xml->book1->page;
    foreach ($agrs as $vals)
    {
        echo "<td><a href=$vals[name] class=link2>$vals</a></td>";
		
    }
}
echo "</tr><tr>";
if(!empty($xml->book2->page))
{
    $agrs = $xml->book2->page;
    foreach ($agrs as $vals)
    {
        echo "<td><a href=$vals[name] class=link2>$vals</a></td>";
		
    }
}
echo "</tr><tr>";
if(!empty($xml->book3->page))
{
    $agrs = $xml->book3->page;
    foreach ($agrs as $vals)
    {
        echo "<td><a href=$vals[name] class=link2>$vals</a></td>";
		
    }
}
echo "</tr><tr>";
if(!empty($xml->book4->page))
{
    $agrs = $xml->book4->page;
    foreach ($agrs as $vals)
    {
        echo "<td><a href=$vals[name] class=link2>$vals</a></td>";
		
    }
}
echo "</tr></table>";
?>

но файлов много пр: inf_omsk.tpl inf_moskva.tpl. inf_novosib.tpl
теперь когда ставлю два когда script на динамический селект, то выбирается первый селект второй уже не работает.
и если пр выбираешь один город то загрузка в div3,4 меняется.
т.е. выбрал Москва загрузился файл inf_moscu.tpl...
как только ставишь два скрипта то перестает работать, даже если они находятся в разных файлах

leon2009sp 08.03.2016 09:16

понял как с формулировать:
в inf0.tpl код на выбор городов:
<script>
    function loadXMLDoc(filename) {
        if (window.ActiveXObject) {
            xhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        else {
            xhttp = new XMLHttpRequest();
        }
        xhttp.open("GET", filename, false);
        try { xhttp.responseType = "msxml-document" } catch (err) { } // Helping IE11
        xhttp.send(null);
        return xhttp.responseXML;
    }
    document.addEventListener('DOMContentLoaded', function () {
        var xml = loadXMLDoc("xml/city.xml"),
            selCity = document.querySelector('#city'),
            selStation = document.querySelector('#station2'),
            i;
        [].forEach.call(xml.querySelectorAll('city'), function (el) {
            selCity.add(new Option(el.getAttribute('name'), el.getAttribute('name')))
        })
        selCity.addEventListener('change', function () {
            selStation.options.length = 0 , i=0;
            [].forEach.call(xml.querySelectorAll('city[name=' + this.value + '] > station2'), function (el) {
                selStation.add(new Option(el.textContent, ++i));
            })
        })
    })
</script>


<div class=selectind><select id=city><option selected>Россия_1</option></select></div></td>
<td>
<div class=selectind>inf3_moscu.tpl</div>

как загружать другие файлы? inf3_omsk.tpl inf3_novosib.tpl
этот код содержится в inf0.tpl
----------------------
в файле inf2.tpl будет поиск т.е:
<script>
    function loadXMLDoc(filename) {
        if (window.ActiveXObject) {
            xhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        else {
            xhttp = new XMLHttpRequest();
        }
        xhttp.open("GET", filename, false);
        try { xhttp.responseType = "msxml-document" } catch (err) { } // Helping IE11
        xhttp.send(null);
        return xhttp.responseXML;
    }
    document.addEventListener('DOMContentLoaded', function () {
        var xml = loadXMLDoc("xml/db.xml"),
            selCity = document.querySelector('#marka'),
            selStation = document.querySelector('#model'),
            i;
        [].forEach.call(xml.querySelectorAll('marka'), function (el) {
            selCity.add(new Option(el.getAttribute('name'), el.getAttribute('name')))
        })
        selCity.addEventListener('change', function () {
            selStation.options.length = 0 , i=0;
            [].forEach.call(xml.querySelectorAll('marka[name=' + this.value + '] > model'), function (el) {
                selStation.add(new Option(el.textContent, ++i));
            })
        })
    })
</script>

<div class=new-select-style-wpandyou>
  <select id=marka><option selected>Выберите авто</option></select>
</div></td>
<td>
<div class=new-select-style-wpandyou>
<select id=model>Выберите Модель</select>
</div>

но когда эти два скрипта находятся в месте а include связывает страницу в целое. т.е. два скрипта на одной стрнице работают не правельно.. и не знаю как загрузить файлы inf3_gorod.tpl

leon2009sp 08.03.2016 09:21

а также при выборе города должны загружаться ссылки в inf5.tpl. при выборе города:
пр: inf3_novosib.tpl значит ссылка будет novosib/ac/index.html. но пока она как ac/index.html

leon2009sp 08.03.2016 09:25

<?xml version="1.0" encoding="utf-8"?>
<category>
    <city name="Россия" link="db/russia/index.php">
		<station2>inf3_rus.tpl</station2>
	</city>
	<city name="Омск" link="db/omsk/index.php">
		<station2>tpl_omsk</station2>
	</city>
<city name="Омск" link="db/novosib/index.php">
		<station2>tpl_novosib</station2>
	</city>
</category>

destus 08.03.2016 10:57

Содержание xml/city.xml и xml/db.xml надо. Хотя бы небольшой макет с несколькими дефолтными значениями. И что это за файлы inf3_omsk.tpl inf3_novosib.tpl мне непонятно.

leon2009sp 08.03.2016 15:44

файл city.xml
<?xml version="1.0" encoding="utf-8"?>
<category>
    <city name="Россия" link="db/russia/ac/index.php">
		<station2>tpl_rus</station2>
		</city>
	<city name="Омск" link="acura.php">
		<station2>tpl_omsk</station2>
		</city>
</category>

файл db.xml
<?xml version="1.0" encoding="utf-8"?>
<category>
<cat_a category="Категория_A">
    <marka name="AC" link="db/russia/ac/index.php">
		<model>AC</model>
		<model>Cobra</model>
	</marka>
	<marka name="Acura" link="acura.php">
		<model>CL</model>
		<model>CSX</model>
	</marka>
    <marka name="Alfa_Romeo" link="alfaromeo.php">
		<model>145</model>
		<model>146</model>
	</marka>
</cat_a>
<cat_b category="Категория_B">
	<marka name="Bentley" link="db/bentley.php">
		<model>Arnage</model>
		<model>Azure</model>
	</marka>
	<marka name="BMW" link="bmw.php">
		<model>1_Series</model>
		<model>2_Series</model>
	</marka>	
</category>

tpl это простой файл html только расширение tpl .
держи просил удалил

leon2009sp 08.03.2016 15:46

пример файла inf0.tpl
<html>
<head>
<script>
    function loadXMLDoc(filename) {
        if (window.ActiveXObject) {
            xhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        else {
            xhttp = new XMLHttpRequest();
        }
        xhttp.open("GET", filename, false);
        try { xhttp.responseType = "msxml-document" } catch (err) { } // Helping IE11
        xhttp.send(null);
        return xhttp.responseXML;
    }
    document.addEventListener('DOMContentLoaded', function () {
        var xml = loadXMLDoc("xml/city.xml"),
            selCity = document.querySelector('#city'),
            selStation = document.querySelector('#station2'),
            i;
        [].forEach.call(xml.querySelectorAll('city'), function (el) {
            selCity.add(new Option(el.getAttribute('name'), el.getAttribute('name')))
        })
        selCity.addEventListener('change', function () {
            selStation.options.length = 0 , i=0;
            [].forEach.call(xml.querySelectorAll('city[name=' + this.value + '] > station2'), function (el) {
                selStation.add(new Option(el.textContent, ++i));
            })
        })
    })
</script>
</head>
<body>
<?php
echo "
<div class=selectind><select id=city><option selected>Россия_1</option></select></div></td>
<td>
<div class=selectind>&nbsp;</div>
?>
</body></html>

destus 08.03.2016 15:57

leon2009sp,
и что на выходе должно получиться? Можно на словах, а можно и сверстать HTML.

leon2009sp 08.03.2016 22:56

лучше на словах, а то еще километр кода :blink:
в inf0.tpl я выбираю город, значит в index.php в диве загружается inf3_*.tpl и город который выбрал, и в inf4.tpl ссылка должна меняться. пр: db/moscu/ac/index.php или db/novosib/ac/index.php
я думал если в javascript выбирать город и передавать его.
city=novosib;
city=moscu;
<marka name="AC" link="db/$city/ac/index.php">

не совсем, это чтобы понятней было: на самом деле так:
$xml = simplexml_load_file("xml/db.xml") or die("Error: Cannot create object");
echo "
<ul class=tops>";
foreach($xml->cat_a as $cat_a)
{
echo "<ol class=link1><font color=#ADADAB>{$cat_a['category']}</font></ol>";
foreach($cat_a->marka as $marka)
{
echo "<li align=left><a href={$marka['link']} class=link2>{$marka['name']}</a></li>";	
}
}
echo "</ul><ul class=tops>";
foreach($xml->cat_b as $cat_b)
{
echo "<ol class=link1><font color=#ADADAB>{$cat_b['category']}</font></ol>";
foreach($cat_b->marka as $marka)
{
echo "<li align=left><a href={$marka['link']} class=link2>{$marka['name']}</a></li>";	
}
}
echo "</ul><ul class=tops>";


значит в xml файле ссылка link=просто ac/index.php
а в коде
"<li align=left><a href={$city}/{$marka['link']} class=link2>{$city}/{$marka['name']}</a></li>";

$city выбирается через select в файле inf0.tpl (tpl - это чтобы не спутаться), но а так как все tpl файлы идут через include то они получаются одно целое.

leon2009sp 09.03.2016 23:00

пример кода с вложением
 
Вложений: 1
теперь намного короче. так пойдет? (нашел вложение). :write:
может кому интересно будет!

Cuntmann 10.03.2016 00:16

Блин, что-то я невпопад ляпнул ) Как это удалить?

leon2009sp 10.03.2016 15:31

чтобы два скрипта работали на одной странице правильно можно сделать так:
function loadXMLDoc(file_1) и function loadXMLDoc(file_2)

leon2009sp 13.03.2016 06:24

это что перепробовал:
selCity.addEventListener('change', function () {
                selStation.options.length = 0 , i=0;
                [].forEach.call(xml.querySelectorAll('city[name=' + this.value + '] > station2'), function (el) {
                  //  selStation.add(new Option(el.textContent, ++i));
					//selStation.id += el.textContent;
					//selStation = div.getElementsByTagName(el.getAttribute('name'))
					//selStation.div.id = el.textContent;
					//input.value = el.textContent;		
					//$('#station2')=el.textContent;	
					//selStation.add($('#station2').el.textContent; )
					selStation.add += el.textContent
                })

но не выдает.

leon2009sp 13.03.2016 21:02

<script>
            function loadXMLDoc(filename) {
                if (window.ActiveXObject) {
                    xhttp = new ActiveXObject("Msxml2.XMLHTTP");
                }
                else {
                    xhttp = new XMLHttpRequest();
                }
                xhttp.open("GET", filename, false);
                try { xhttp.responseType = "msxml-document" } catch (err) { } // Helping IE11
                xhttp.send(null);
                return xhttp.responseXML;
            }
            document.addEventListener('DOMContentLoaded', function () {
                var xml = loadXMLDoc("xml/city.xml"),
                    selCity = document.querySelector('#city'),
                    selStation = document.querySelector('#station2'),i;
                //    selStation = document.getElementById('#station2'),i;
                [].forEach.call(xml.querySelectorAll('city'), function (el) {
                  // selCity.add(new Option(el.getAttribute('name'), el.getAttribute('name')))
                  
                    document.getElementById('sec1').innerHTML = el.getAttribute('name'),el.getAttribute('name');
                })
                selCity.addEventListener('change', function () {
                    selStation.options.length = 0 , i=0;
                    [].forEach.call(xml.querySelectorAll('city[name=' + this.value + '] > station2'), function (el) {
                     //   selStation.add(new Option(el.textContent, ++i));
                        document.getElementById('sec1').innerHTML = el.textContent;
                    })
                })
            })
        </script>
        <select id=city><option selected>33333333</option></select>
       <div id="sec1">123</div>

ну где же косяк то

destus 14.03.2016 05:53

в строке 22. , зачем?

leon2009sp 14.03.2016 07:24

это я пробовал по разному :blink: если строку 22 оставить то будет загружаться в див последние значение.
а если убрать то нифига не работает. на самом деле как тока не издевался:
selStation.add('sec1');
:blink:
или вообще весь список файла вылезти в див.
а ее строка 22 отвечает за чтение из файла сити, помещает от туда name в селект (в первый).

leon2009sp 14.03.2016 09:50

это оставляю как есть!
selCity.add(new Option(el.getAttribute('name'), el.getAttribute('name')))

а строчку вывода где
selStation.add(new Option(el.textContent, ++i));
заменяю на
document.getElementById('sec1').innerHTML = el.textContent;

и по идеи должно работать:
<select id=city><option selected>11111111</option></select>
       <div id="sec1">123</div>

leon2009sp 14.03.2016 09:58

по шагам:
<script>
            function loadXMLDoc(filename) {
                if (window.ActiveXObject) {
                    xhttp = new ActiveXObject("Msxml2.XMLHTTP");
                }
                else {
                    xhttp = new XMLHttpRequest();
                }
                xhttp.open("GET", filename, false);
                try { xhttp.responseType = "msxml-document" } catch (err) { } // Helping IE11
                xhttp.send(null);
                return xhttp.responseXML;
            }

загрузили хмль
document.addEventListener('DOMContentLoaded', function () {
                var xml = loadXMLDoc("xml/city.xml"),
                    selCity = document.querySelector('#city'),
                   // selStation = document.querySelector('#station2'),i;
                    selStation = document.getElementById('#station2'),i;
                [].forEach.call(xml.querySelectorAll('city'), function (el) {
                  selCity.add(new Option(el.getAttribute('name'), el.getAttribute('name')))
                 
                  //  document.getElementById('sec1').innerHTML = el.getAttribute('name'),el.getAttribute('name');
                })

прошлись по сити и именам его а т.е. (name="Новосибирск") или (name="Москва") или name="ленинград".
selCity.addEventListener('change', function () {
                     selStation.options.length = 0 , i=0;
					//selStation.id.length = 0 , i=0;
                    [].forEach.call(xml.querySelectorAll('city[name=' + this.value + '] > station2'), function (el) {
                     //   selStation.add(new Option(el.textContent, ++i));
					 
                     //   document.getElementById('sec1').innerHTML = el.textContent;
					//	 document.getElementById('station2').innerHTML = el.getAttribute('name'),el.getAttribute('name'),i;
					//selStation.add(el.textContent,++i);
					document.getElementById('sec1').innerHTML = '123123123';
                    })
                })
            })
        </script>

начиная с первой строки если выбрали то автоматом выбирается статион пр:
<station2>tpl_novosib1</station2>
.

ХМЛЬ:
<?xml version="1.0" encoding="utf-8"?>
<category>
    <city name="Россия" link="db/russia/ac/index.php">
		<station2>tpl_rus</station2>
	</city>
	<city name="Омск" link="acura.php">
		<station2>tpl_omsk</station2>
	</city>
	<city name="Новосибирск" link="acura.php">
		<station2>tpl_novosib1</station2>
	</city>
</category>

destus 14.03.2016 10:10

Цитата:

selStation = document.getElementById('#station2')
зачем #?
Цитата:

document.getElementById('sec1')
что такое sec1?

leon2009sp 14.03.2016 13:39

selStation = это как занесение в переменную. что то вроде var на delphi.
а sec1 - это как сектор блок. т.е. все что в sec1 отображается в див.
document.getElementById('sec1') можно заменить на  document.getElementById('station2')

от этого ничего не поменяется. а вто "#" юмора не понял. то что много записей? как массив?

leon2009sp 14.03.2016 16:03

если я делаю так:
selCity.add(new Option(el.getAttribute('name'), el.getAttribute('name')))
                 document.getElementById('sec1').innerHTML = el.textContent;

то выдает последний статион он у меня новосиб.
но мне же нужно в цикл его тогда переношу:
selCity.addEventListener('change', function () {
                     selStation.options.length = 0 , i=0;
	
                    [].forEach.call(xml.querySelectorAll('city[name=' + this.value + '] > station2'), function (el) {
     
					document.getElementById('sec1').innerHTML = el.textContent;
                    })

leon2009sp 14.03.2016 16:45

все доперло :dance:
проверти на ошибки пожалуйста
<script>
        function loadXMLDoc(filename) {
            if (window.ActiveXObject) {
                xhttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
            else {
                xhttp = new XMLHttpRequest();
            }
            xhttp.open("GET", filename, false);
            try { xhttp.responseType = "msxml-document" } catch (err) { } // Helping IE11
            xhttp.send(null);
            return xhttp.responseXML;
        }
        document.addEventListener('DOMContentLoaded', function () {
            var xml = loadXMLDoc("xml/city.xml"),
                selCity = document.querySelector('#city'),
              //  selStation = document.querySelector('#station2'),i;
				// elem = document.getElementById('my');
				
				selStation = document.getElementById('station2');
				
            [].forEach.call(xml.querySelectorAll('city'), function (el) {
                selCity.add(new Option(el.getAttribute('name'), el.getAttribute('name')))
		})
            selCity.addEventListener('change', function () {
               // selStation.options.length = 0 , i=0;
                [].forEach.call(xml.querySelectorAll('city[name=' + this.value + '] > station2'), function (el) {
                  //  selStation.add(new Option(el.textContent, ++i));
					//document.getElementById('station2').innerHTML = el.textContent;
					selStation.innerHTML = el.textContent;
                })
            })
        })
    </script>
    <select id=city><option selected>1111111</option></select>
    <div id=station2>333333</div>

destus 14.03.2016 17:15

leon2009sp,
поздравляю :victory:


Часовой пояс GMT +3, время: 18:40.