我想知道是否有一个xsl代码可以循环遍历xml文件并仅提取节点名称。另外还要确保它不会写两次。
这是针对我在客户方的项目。我需要将xml转换为文本,并且正在使用groovy和xslt进行此操作。由于xml文件很大,因此花很多时间才能遍历xml文件以查找不同的“价值抵免”。
我已经有了这个,但是它给了我所有的节点及其值,所以每个节点不止一次
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="/currencies/record"></xsl:apply-templates>
</xsl:template>
<xsl:key name="names" match="*|@*" use="name()"/>
<xsl:template match="/currencies/record">
<xsl:for-each select="//*">
<xsl:value-of select="local-name()"/>=<xsl:apply-templates select="current()/text()"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
xml看起来像这样:
<record deprecated="false"
id="CUR00001"
date.creation="2010-03-22"
adm.status="current">
<authority-code>AED</authority-code>
<code-4217>AED</code-4217>
<label>
<lg.version lg="bul" script="Cyrillic">Дирхам на ОАЕ</lg.version>
<lg.version lg="ces">UAE dirham n. emirátský dirham</lg.version>
<lg.version lg="dan">Emiratarabisk dirham</lg.version>
<lg.version lg="deu" gender.grammar="M">VAE-Dirham</lg.version>
<lg.version lg="deu" number.grammar="P">VAE-Dirhams</lg.version>
<lg.version lg="fin">Arabiemiirikuntien dirhami</lg.version>
<lg.version lg="fra" gender.grammar="M">Dirham des Émirats arabes unis</lg.version>
...
</label>
<currency.subunit>
<lg.version lg="bul" script="Cyrillic">филс</lg.version>
<lg.version lg="ces">fils</lg.version>
<lg.version lg="dan">fils</lg.version>
<lg.version lg="deu" gender.grammar="M">Fils</lg.version>
<lg.version lg="ell" script="Greek">φιλς</lg.version>
<lg.version lg="eng" gender.grammar="N">fils</lg.version>
...
<start.use>1990-01-01</start.use>
<linkCOUid>COU0450</linkCOUid>
<use.context>TED_SCHEMA</use.context>
</record>
在我的示例中,“ lg.version”出现了很多次,我希望它只会出现1次。 感谢您的帮助。
答案 0 :(得分:0)
总是说出您正在使用哪个版本的XSLT。
在XSLT 2.0中,它只是distinct-values(//*/node-name())
(假设“节点”实际上是“元素”)。
如果您使用的是1.0版本,并且由于某些原因而无法前进,请使用Muenchian分组-这样会使情况变得更加复杂。