Работа с jscript и xml
30-09-2008 13:08
к комментариям - к полной версии
- понравилось!
Понадобилось прочитать xml файл на jscript. Jscript не люблю за то что если где то ошибка - запаришься искать.
Так и в этот раз, решил начать с малого, прочитать пару атрибутов из файла. Взял из примера в сети, парился часа два, из за пары мелочей, их пометил комментами
xml файл ,
<pattern path="d:\\mypat.dot">
<attributes>
<attribute name="enumber" value="Дог2004"/>
<attribute name="createdon" value="21.08.2008"/>
</attributes>
<details>
<detail name="rekvizits">
<detailattributes>
<detailattribute name="name" value="Юр реквизит 1" />
<detailattribute name=""address" value="Березина 6" />
<detailattribute name=""address1" value="Березина 7" />
</detailattributes>
</detail>
</details>
</pattern>
задача была прочитать теги attribute.
следующей функцией:
function doXml()
{
// JScript source code
var xml = new ActiveXObject("Microsoft.XMLDOM") //.2.6 or .3.0 or 3.0
xml.async = false;//это надо указать чтобы дождаться ответа а не начать работать над незагруженным документом. Эту опцию поставил через полчаса..
if (xml.load("D:\\XMLFile1.xml"))
{
//Enumerator позволяет бродить по коллекции с помощью методов moveNext atEnd
//метод selectNodes выбирает из файла все атрибуты с заданным названием
//!!!!перед названием атрибута нужны эти две палки // из за них парился два часа...
var ex = new Enumerator(xml.documentElement.selectNodes("//attribute"));
for (ex.moveFirst();!ex.atEnd(); ex.moveNext() )
{
var it = ex.item();
alert(it.getAttribute("name")+" . "+it.getAttribute("value"));
} //ex Collection
} // xml.load
else
{
alert("Нет файла");
}
}
Зачем все это?
Допустим нам нужно напечатать определенный шаблон документа, имея такой же xml файл.
Функция слегка меняется на следующую:
//открываем файл шаблона
var oWord = new ActiveXObject("Word.Application");
var oDoc;
oWord.Visible = 1;
oDoc = oWord.Documents.Add("d:\\mypattern.dot");
// JScript source code
var xml = new ActiveXObject("Microsoft.XMLDOM") //.2.6 or .3.0 or 3.0
xml.async = false;
if (xml.load("D:\\XMLFile1.xml"))
{
var ex = new Enumerator(xml.documentElement.selectNodes("//attribute"));
for (ex.moveFirst();!ex.atEnd(); ex.moveNext() )
{
var it = ex.item();
//alert(it.getAttribute("name")+" . "+it.getAttribute("value"));
if(oDoc.Bookmarks.Item(it.getAttribute("name")))
{
oDoc.Bookmarks.Item(it.getAttribute("name")).Range.Text = it.getAttribute("value");
}
} //ex Collection
} // xml.load
else
{
alert("Нет файла");
}
Пример работает, и выводит в закладки шаблона данные, в результате из
"Данный договор № от подписан всеми сторонами.
Подпись_______
"
выводит что то вроде
"Данный договор № Дог2004 от 21.08.2008 подписан всеми сторонами.
Подпись_______
"
, т.е. если генерировать xml файл то можно выводить данные в ворд с веб страницы с помощью jscript и ActiveX. Просто веб странице доступ к ворду клиента скорее всего недоступен, а таким образом можно создавать документы. Полезно для всяких бланков, позволяет обходиться без отчетов.
Но возникает проблема что делать если нужные какие либо данные относящиеся к другой таблице - например строки ком предложения...
Постараюсь развить дальше, что получится напишу позднее.
вверх^
к полной версии
понравилось!
в evernote