我有一些* .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”,有没有办法做到这一点? 我想我需要使用类似“node-name('blabla')”和value-of?的东西。 以及如何选择一组方法参数(不同)? (param name =“参数名称”),是的我需要使用“密钥”,但用它找不到好的样本
非常感谢
PS转换xml-&gt; xml时我必须使用Far(“xsl in.xml transform.xsl out.xml”),因为尝试从cdm.exe执行时有一些奇怪的错误,我不喜欢FAR一点点,还有另一种转换xmls的方法吗?
答案 0 :(得分:2)
它工作得很好,但是..有 任何方式没有 “XSL:复制的”?认为我需要使用 像“node-name('blabla')”之类的东西 和价值?..
了解<xsl:element>
指令以及identity rule 。
..以及如何选择一组方法 参数(不同)? (param name =“参数名称”),是的,我需要 用“钥匙”但找不到好处 带样品
这是第二个问题(三分之一),与第一个问题截然不同。阅读 Muenchian grouping 。并将其作为一个单独的问题。
答案 1 :(得分:1)
鲜明
<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
明天我会写关于没有“复制”的复制
顺便说一句:好Tutorial