Всем привет!
Подскажите, как в 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>
Заранее благодарю!
Здравствуйте, 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>Заранее благодарю!
Хм, вот так, как ты это сделал...
Здравствуйте, isek, Вы писали:
I>Здравствуйте, 166MMX, Вы писали:
MMX>>Всем привет! MMX>>Подскажите, как в XML-ке поставить префиксы пространства имен у элементов ??
I> Хм, вот так, как ты это сделал...
Мило... и как я сам не догадался ?
просто входящяя XML-ка несколько больше... эдак в 2000 строк...
поэтому и прошу дать совет по поводу подходящей трансформации
Здравствуйте, 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=
Здравствуйте, 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");
ВНИМАНИЕ! РегЭкспы не исчерпывающие — их надо будет дошаманить (возможны пустые элементы и т.д.)
Здравствуйте, 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-ка, которая бы это делала...
Здравствуйте, 166MMX, Вы писали:
MMX>Здравствуйте, isek, Вы писали:
I>>Наверное, с помощью xsl это можно сделать ещё проще, но я на этом xsl уже мозги сломал!..
MMX>мдаа... xsl — убойная сила...
Это шутка или ты тоже (как и я) — инвалид xsl?
Здравствуйте, 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...
Спасибо за помощь!