XSLT... вопрос о префиксе NS
От: 166MMX  
Дата: 10.11.05 12:02
Оценка:
Всем привет!
Подскажите, как в XML-ке поставить префиксы пространства имен у элементов ??
То есть... как из этого:
<mag xmlns="myNS">
<a>
<b> text </b>
<b> text </b>
</a>
</mag>
получить это:
<v:mag xmlns:v="myNS">
<v:a>
<v:b> text </v:b>
<v:b> text </v:b>
</v:a>
</v:mag>
Заранее благодарю!
Re: XSLT... вопрос о префиксе NS
От: isek Украина  
Дата: 10.11.05 12:06
Оценка:
Здравствуйте, 166MMX, Вы писали:

MMX>Всем привет!

MMX>Подскажите, как в XML-ке поставить префиксы пространства имен у элементов ??
MMX>То есть... как из этого:
MMX><mag xmlns="myNS">
MMX> <a>
MMX> <b> text </b>
MMX> <b> text </b>
MMX> </a>
MMX></mag>
MMX>получить это:
MMX><v:mag xmlns:v="myNS">
MMX> <v:a>
MMX> <v:b> text </v:b>
MMX> <v:b> text </v:b>
MMX> </v:a>
MMX></v:mag>
MMX>Заранее благодарю!
Хм, вот так, как ты это сделал...
Re[2]: XSLT... вопрос о префиксе NS
От: 166MMX  
Дата: 10.11.05 12:12
Оценка:
Здравствуйте, isek, Вы писали:

I>Здравствуйте, 166MMX, Вы писали:


MMX>>Всем привет!

MMX>>Подскажите, как в XML-ке поставить префиксы пространства имен у элементов ??

I> Хм, вот так, как ты это сделал...


Мило... и как я сам не догадался ?
просто входящяя XML-ка несколько больше... эдак в 2000 строк...
поэтому и прошу дать совет по поводу подходящей трансформации
Re: XSLT... вопрос о префиксе NS
От: Jax Россия  
Дата: 10.11.05 13:04
Оценка:
Здравствуйте, 166MMX, Вы писали:

MMX>Всем привет!

MMX>Подскажите, как в XML-ке поставить префиксы пространства имен у элементов ??
MMX>То есть... как из этого:
MMX><mag xmlns="myNS">
MMX> <a>
MMX> <b> text </b>
MMX> <b> text </b>
MMX> </a>
MMX></mag>
MMX>получить это:
MMX><v:mag xmlns:v="myNS">
MMX> <v:a>
MMX> <v:b> text </v:b>
MMX> <v:b> text </v:b>
MMX> </v:a>
MMX></v:mag>
MMX>Заранее благодарю!

В студии сделать поиск и замену со следующими параметрами и установленной галочкой Use (Regular expressions):
Find: \<{:w(\>|:b)}
Replace: \<v\:\1

Затем
Find: \</{:w(\>|:b)}
Replace: \</v\:\1

Ну и последнее можно без регулярных выражений:
Find: xmlns=
Replace: xmlns:v=
Re[3]: XSLT... вопрос о префиксе NS
От: isek Украина  
Дата: 10.11.05 13:11
Оценка:
Здравствуйте, 166MMX, Вы писали:

MMX>Здравствуйте, isek, Вы писали:


I>>Здравствуйте, 166MMX, Вы писали:


MMX>>>Всем привет!

MMX>>>Подскажите, как в XML-ке поставить префиксы пространства имен у элементов ??

I>> Хм, вот так, как ты это сделал...


MMX>Мило... и как я сам не догадался ?

MMX>просто входящяя XML-ка несколько больше... эдак в 2000 строк...
MMX>поэтому и прошу дать совет по поводу подходящей трансформации

Судя по постановке вопсроса, средство не важно какое?
Я бы сделал это поиском с заменой (по регулярному выраэению). Примерно так (JScript):



// Загрузить xml-файл
var  oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
oXmlDoc.load(g_oFS.GetParentFolderName("old.xml"))

// Префикс
var ns = "v:";

// Получить старый xml
var str = oXmlDoc.xml;

// Всатвить префикс в элементы   
re = /<(.* )/g;    
var str2    =    str.replace(re, "<" + ns + "$1");
// Всатвить префикс в атрибуты   
re = / (.*=\")/g;    
str2    =    str2.replace(re, " " + ns + "$1");

// Загрузить новый xml
oXmlDoc.loadXML(str2);

// Сохранить
oXmlDoc.save("new.xml");


ВНИМАНИЕ! РегЭкспы не исчерпывающие — их надо будет дошаманить (возможны пустые элементы и т.д.)
Re[4]: XSLT... вопрос о префиксе NS
От: isek Украина  
Дата: 10.11.05 13:12
Оценка:
Наверное, с помощью xsl это можно сделать ещё проще, но я на этом xsl уже мозги сломал!..
Re[2]: XSLT... вопрос о префиксе NS
От: 166MMX  
Дата: 10.11.05 13:16
Оценка:
Здравствуйте, Jax, Вы писали:

Jax>Здравствуйте, 166MMX, Вы писали:


Jax>В студии сделать поиск и замену со следующими параметрами и установленной галочкой Use (Regular expressions):

Jax>Find: \<{:w(\>|:b)}
Jax>Replace: \<v\:\1

Jax>Затем

Jax>Find: \</{:w(\>|:b)}
Jax>Replace: \</v\:\1

Jax>Ну и последнее можно без регулярных выражений:

Jax>Find: xmlns=
Jax>Replace: xmlns:v=

Это конечно решение, но мне нужна трансформация, xsl-ка, которая бы это делала...
Re[5]: XSLT... вопрос о префиксе NS
От: 166MMX  
Дата: 10.11.05 13:19
Оценка:
Здравствуйте, isek, Вы писали:

I>Наверное, с помощью xsl это можно сделать ещё проще, но я на этом xsl уже мозги сломал!..


мдаа... xsl — убойная сила...
Re[6]: XSLT... вопрос о префиксе NS
От: isek Украина  
Дата: 10.11.05 13:46
Оценка:
Здравствуйте, 166MMX, Вы писали:

MMX>Здравствуйте, isek, Вы писали:


I>>Наверное, с помощью xsl это можно сделать ещё проще, но я на этом xsl уже мозги сломал!..


MMX>мдаа... xsl — убойная сила...

Это шутка или ты тоже (как и я) — инвалид xsl?
Re: XSLT... вопрос о префиксе NS
От: achp  
Дата: 10.11.05 13:49
Оценка:
Здравствуйте, 166MMX, Вы писали:

MMX>Подскажите, как в XML-ке поставить префиксы пространства имен у элементов ??


Что-то в этом роде:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" indent="yes" encoding="UTF-8"/>
    <xsl:template match="*">
        <xsl:element name="v:{local-name()}" namespace="{namespace-uri()}">
            <xsl:apply-templates select="*|@*|text()"/>
        </xsl:element>
    </xsl:template>
    <xsl:template match="@*|text()">
        <xsl:copy>
            <xsl:apply-templates select="*|@*|text()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="/">
        <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>
Re[2]: XSLT... вопрос о префиксе NS
От: 166MMX  
Дата: 11.11.05 07:43
Оценка:
Здравствуйте, achp, Вы писали:

A>Здравствуйте, 166MMX, Вы писали:


MMX>>Подскажите, как в XML-ке поставить префиксы пространства имен у элементов ??


A>Что-то в этом роде:

A>
A><?xml version="1.0" encoding="UTF-8"?>
A><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
A>    <xsl:output method="xml" version="1.0" indent="yes" encoding="UTF-8"/>
A>    <xsl:template match="*">
A>        <xsl:element name="v:{local-name()}" namespace="{namespace-uri()}">
A>            <xsl:apply-templates select="*|@*|text()"/>
A>        </xsl:element>
A>    </xsl:template>
A>    <xsl:template match="@*|text()">
A>        <xsl:copy>
A>            <xsl:apply-templates select="*|@*|text()"/>
A>        </xsl:copy>
A>    </xsl:template>
A>    <xsl:template match="/">
A>        <xsl:apply-templates/>
A>    </xsl:template>
A></xsl:stylesheet>
A>


Ясна... то есть только "в лоб"... надеялся, что есть маленькое и изящное решение с помощью пока еще непознаных мной фишек XSLT...
Спасибо за помощь!
Re[3]: XSLT... вопрос о префиксе NS
От: achp  
Дата: 11.11.05 09:42
Оценка:
Здравствуйте, 166MMX, Вы писали:

MMX>Ясна... то есть только "в лоб"...


Хм, а что тут ещё придумаешь?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.