AddExtensionObject штукатурка по всему моему XML - PullRequest
0 голосов
/ 08 ноября 2011

Я использую XSLT для того, для чего он предназначен, то есть для отображения формы 1 xml формы на другую.

Из-за отсутствия поддержки 2.0 для M $ и всей замечательной функциональности, которая поставляется (сравнения без учета регистра)Кто-нибудь? Я надеюсь, что кто-то потерял свою работу из-за того, что ушел из 1.0), и еще больше, я надеюсь использовать AddExtensionObject, чтобы добавить некоторые функции для добавления поддержки, которая мне требуется.Я считаю, что это значительно более безопасно, чем запуск скриптов.

раздражает то, что урна наклеена на все мои теги.например.

<INVAC xmlns:myColor="urn:myColor">
<MEMBO>7131</MEMBO>
<FUNDNAME>Fund00b</FUNDNAME>
</INVAC>

когда я слежу за измененной версией http://www.15seconds.com/issue/031112.htm

Я хочу использовать дополнительную функциональность, но не имею вывода .......

спасибо заранее!

1 Ответ

1 голос
/ 08 ноября 2011

Вы нашли ответ на свой главный вопрос - атрибут exclude-result-prefixes xsl:stylesheet должен использоваться для указания всех префиксов пространства имен (список, разделенный пробелами), на которые мы не хотели бы копироваться элементы буквального результата.

На ваш другой вопрос также легко ответить:

Кто-нибудь сравнивает без регистра?

Используйте

 translate($s1, $vUpper, $vLower) 
=
 translate($s2, $vUpper, $vLower)

Это дает true() точно, когда две строки $s1 и $s2 равны без учета регистра.

Переменная $vUpper должна содержать все заглавные буквы алфавита, а переменная $vLower должна содержать все строчные буквы алфавита.

Вот полный пример :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pNameOfElementsToDelete" select="'DeLetE'"/>

 <xsl:variable name="vUpper" select=
 "'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>

 <xsl:variable name="vLower" select=
 "'abcdefghijklmnopqrstuvwxyz'"/>

 <xsl:template match="node()|@*" name="identity">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="*[true()]">
  <xsl:if test=
  "not(
   translate(name(), $vUpper, $vLower)
  =
   translate($pNameOfElementsToDelete, $vUpper, $vLower)
   )
 ">
   <xsl:call-template name="identity"/>
  </xsl:if>
 </xsl:template>
</xsl:stylesheet>

при применении к этому документу XML :

<a>
 <b>
  <Delete/>
 </b>
 <dell/>
 <c>
   <deLete/>
 </c>
</a>

это преобразование создает новый XML-документ, в котором любой элемент, имя которого равно без учета регистра "DeLetE":

<a>
   <b/>
   <dell/>
   <c/>
</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...