Копирование XSLT без xsl: copy-of - PullRequest
0 голосов
/ 21 октября 2010

У меня есть * .xml с такими элементами, как:

<app-method name="leave-accrual-status-details" kind="enquiry">
    <title>...</title>
    <required-roles>
      <role name="authenticated"/>
    </required-roles>
    <asd>
      <param name="..." datatype="dt:int" control="hidden" call-kind="..." data-kind="..."/>
    </asd>
    <data-engine sp="spLeaveAccrualStatusDetails">
    ...
    </data-engine>
    <wia>
     ...
    </wia>
  </app-method>

И создание нового .xml-документа (выбираются только элементы "app-method"). Я делаю этовот так: ( .xsl)

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
  <xsl:output method="xml" encoding="utf-8" indent="no"></xsl:output>

  <xsl:template match="/">
  <xsl:for-each select="//app-method">
  <xsl:if test='./required-roles/role[@name="administrator"]'>
  <xsl:copy-of select="." />
  </xsl:if>
  </xsl:for-each>
  </xsl:template>

 </xsl:stylesheet>

Работает отлично, но ... Есть ли способ сделать это без "xsl: copy-of"?Думаю, мне нужно использовать что-то вроде «имя-узла (« blabla »)» и значение-из? .. И как выбрать набор параметров методов (различных)?(param name = "имя параметра"), да, мне нужно использовать "ключ", но я не могу найти хорошие образцы с ним

Большое спасибо

PS При преобразовании xml-> xml у меня естьиспользовать Far ("xsl in.xml transform.xsl out.xml"), потому что при попытке сделать это из cdm.exe возникает какая-то странная ошибка, мне немного не нравится FAR, есть ли другой способ конвертировать xmls?

Ответы [ 2 ]

2 голосов
/ 21 октября 2010

Работает отлично, но .. Есть ли любой способ сделать это без «XSL: скопировать из»? Думаю, мне нужно использовать что-то вроде "имя узла ('blabla')" и значение-из? ..

Прочтите об инструкции <xsl:element>, а также о правиле .

.. А как выбрать набор методов параметры (разные)? (парам name = "имя параметра"), да мне нужно использовать «ключ», но не могу найти хорошее образцы с ним

Это второй вопрос (из трех), который сильно отличается от первого. Читайте о мюнхенская группировка . И задайте это как отдельный вопрос.

1 голос
/ 21 октября 2010

Distinct

    <xsl:key name="pkey" match="param" use="@name"/>

     <xsl:template match="/">
        <xsl:for-each select='//app-method/asd/param[generate-id() = generate-id(key("pkey", @name)[1])]'>
             <parameter>
             <xsl:value-of select="@name"/>
             </parameter>
        </xsl:for-each>
     </xsl:template>
</xsl:stylesheet>

Уникальный

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

    <xsl:key name="pkey" match="@name" use="."/>

     <xsl:template match="/">
        <xsl:for-each select="//app-method/asd">
             <xsl:copy-of select='param[@name[generate-id() = generate-id(key("pkey",.)[1])]]'/>
        </xsl:for-each>
     </xsl:template>
</xsl:stylesheet>

Использование cmd.exe для преобразования XML: скачать MSXSL.exe (самый новый), поместить его в какую-нибудь системную папку (которая ужевключается в переменную пути), а затем из командной строки msxsl source.xml transformer.xsl -o result.xml

Я напишу завтра о копировании без "copy-of"

Кстати:хорошо Учебник

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