<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; WSH: Обработка XML]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6420</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6420&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «WSH: Обработка XML».]]></description>
		<lastBuildDate>Wed, 09 Nov 2011 14:45:16 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: WSH: Обработка XML]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53373#p53373</link>
			<description><![CDATA[<div class="quotebox"><cite>KaKTuZ пишет:</cite><blockquote><p>Иногда в теге &lt;pfr_xmls&gt; может быть не две, как сейчас. а три сертификата. А то и один.<br />Надо весь текст от тега &lt;РегистрационнаяИнформация&gt; закинуть в отдельную XML и назвать его... Не важно как. А поскольку тут два сертификата, то надо создать две XML.<br />Соответственно, вытащив из нее имя компании и серийный номер.</p></blockquote></div><p>Простите за недопонимание, но Ваши мысли пока туманны. <br />Думаю, следующий рабочий пример на JScript будет понятен как шаблон для развития мысли?<br /></p><div class="codebox"><pre><code>var f = &#039;.\\z.xml&#039;;

var xml = new ActiveXObject(&#039;MSXML2.DOMDocument&#039;);

xml.load(f);

var regInfos = xml.getElementsByTagName(&#039;регистрационнаяИнформация&#039;);

for (var i = 0; i &lt; regInfos.length; i++) {
	var regInfo = regInfos[i];
	WScript.Echo(regInfo.xml);
	WScript.Echo();
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Wed, 09 Nov 2011 14:45:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53373#p53373</guid>
		</item>
		<item>
			<title><![CDATA[WSH: Обработка XML]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53372#p53372</link>
			<description><![CDATA[<p>Уважаемые. Вопрос.<br />Есть xml, которая выглядит вот так:</p><div class="codebox"><pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;Windows-1251&quot;?&gt;
&lt;root&gt;
    &lt;id&gt;3904&lt;/id&gt;
    &lt;sos_login&gt;848hRRB9Th&lt;/sos_login&gt;
    &lt;pfr_xmls&gt;
        &lt;pfr_xml code=&quot;014-001&quot; no=&quot;014-001-052241&quot;&gt;

&lt;регистрационнаяИнформация&gt;
    &lt;датаВремяФормирования&gt;2011-11-09T13:05:05&lt;/датаВремяФормирования&gt;
    &lt;списокСубъектов&gt;
        &lt;субъект идентификаторСубъекта=&quot;014-001-052241&quot; типСубъекта=&quot;АбонентСЭД&quot; имя=&quot;Name of firm&quot;&gt;
            &lt;списокСертификатов типПодписанта=&quot;руководитель&quot;&gt;
                &lt;сертификат активный=&quot;true&quot;&gt;
MIIEZjCCBB
                &lt;/сертификат&gt;
            &lt;/списокСертификатов&gt;
        &lt;/субъект&gt;
    &lt;/списокСубъектов&gt;
&lt;/регистрационнаяИнформация&gt;


        &lt;/pfr_xml&gt;
        &lt;pfr_xml code=&quot;014-004&quot; no=&quot;014-004-012910&quot;&gt;

&lt;регистрационнаяИнформация&gt;
    &lt;датаВремяФормирования&gt;2011-11-09T13:05:05&lt;/датаВремяФормирования&gt;
    &lt;списокСубъектов&gt;
        &lt;субъект идентификаторСубъекта=&quot;014-004-012910&quot; типСубъекта=&quot;АбонентСЭД&quot; имя=&quot;Name of Firm&quot;&gt;
            &lt;списокСертификатов типПодписанта=&quot;руководитель&quot;&gt;
                &lt;сертификат активный=&quot;true&quot;&gt;
MIIEZjCCBB
                &lt;/сертификат&gt;
            &lt;/списокСертификатов&gt;
        &lt;/субъект&gt;
    &lt;/списокСубъектов&gt;
&lt;/регистрационнаяИнформация&gt;
        &lt;/pfr_xml&gt;
    &lt;/pfr_xmls&gt;
&lt;/root&gt;</code></pre></div><p>Иногда в теге &lt;pfr_xmls&gt; может быть не две, как сейчас. а три сертификата. А то и один.<br />Надо весь текст от тега &lt;РегистрационнаяИнформация&gt; закинуть в отдельную XML и назвать его... Не важно как. А поскольку тут два сертификата, то надо создать две XML. <br />Соответственно, вытащив из нее имя компании и серийный номер.</p><p>У меня пока временно выглядит код вот так:</p> <br /><div class="codebox"><pre><code>Dim DOMDocument1, Node1, tmpStr1
Set DOMDocument1 = CreateObject(&quot;MSXML2.DOMDocument&quot;)
With DOMDocument1
    .Load &quot;C:\XML\&quot; &amp; basenameNEW
    if .parseError.reason &lt;&gt; &quot;&quot; Then
        MsgBox .parseError.reason,vbCritical
        WScript.Quit
    End if
    Set currNode = domdocument1.documentElement
    
    login = currNode.childNodes(1).text &#039;Копирую значение Логина
    WScript.Echo currNode.childNodes(1).text
    &#039;XML1 = currNode.childNodes(2).text
    &#039;WScript.Echo currNode.childNodes(2).text
End With

&#039;ТУТ ДОЛЖЕН ИДТИ ВРОДЕ КАК ЦИКЛ FOR EACH. 
&#039;ТОЛЬКО НЕ ПОНИМАЮ С КАКИМИ ПАРАМЕТРАМИ.


&#039;Ниже сейчас разбираю одну XML. Вернее придется разобрать один из сертификатов.Но в цикле.
&#039;Option Explicit
Dim DOMDocument, Node, tmpStr
Set DOMDocument = CreateObject(&quot;MSXML2.DOMDocument&quot;)

&#039;Далее надо загрузить XML с первым сертификатом.

With DOMDocument
    .Load &quot;C:\XML\&quot; &amp; basename &#039;Я так понимаю, это не надо. 
    if .parseError.reason &lt;&gt; &quot;&quot; Then
        MsgBox .parseError.reason,vbCritical
        WScript.Quit
    End if
    With .documentElement.SelectSingleNode(&quot;списокСубъектов&quot;)
        tmpStr = &quot;&quot;
        For Each Node in .SelectNodes(&quot;pfr_xmls&quot;)
            &#039;tmpStr = tmpStr &amp; &quot;Идентификатор субъекта: &quot; &amp; Node.GetAttribute(&quot;идентификаторСубъекта&quot;) &amp; vbCrlf
            &#039;tmpStr1 = tmpStr &amp; &quot;Тип субъекта: &quot; &amp; Node.GetAttribute(&quot;идентификаторСубъекта&quot;) &amp; vbCrlf
            &#039;tmpStr2 = tmpStr &amp; &quot;имя: &quot; &amp; Node.GetAttribute(&quot;имя&quot;) &amp; vbCrlf
            sNomer = Node.GetAttribute(&quot;идентификаторСубъекта&quot;)
            firm = Node.GetAttribute(&quot;имя&quot;)
            
        Next
        firm = Replace(firm,&quot;&#039;&quot;,&quot;&quot;)
        firm = Replace(firm,&quot;&quot;&quot;&quot;, &quot;&quot;)
        firm = Replace(firm,&quot;»&quot;, &quot;&quot;)
        firm = Replace(firm,&quot;«&quot;, &quot;&quot;)
    
    End With
End With</code></pre></div><p>Грубо говоря, структура такая: <br />- Скачивание XML. (есть)<br />- Считываем поле login. (есть)<br />- Далее циклом проходим FOR EACH по всем &lt;pfr_xmls&gt; :<br />_______ Сохраняем и формируем новый XML-файл, который начинается только с тегов &lt;РегистрационнаяИнформация&gt; с примерно таким же id и дописываем через &quot;_&quot; цифру по счету. (Пример: id 4556. Значит наши новые XML будут 4556_1, 4556_2)<br />_______ Вытаскиваем данные - номер и имя компании.<br />_______ Далее идет отсылание на почту (есть).</p><p>Основная проблема, не знаю немного структуру работы с XMLDOM</p>]]></description>
			<author><![CDATA[null@example.com (KaKTuZ)]]></author>
			<pubDate>Wed, 09 Nov 2011 13:55:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53372#p53372</guid>
		</item>
	</channel>
</rss>
