我正在尝试转换包含单词列表的xml文件,我试图从结果文档中排除某些元素,更具体地说,
我的清单如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="merge.xsl"?>
<dic:englishWords xmlns:dic = "dictionary">
<dic:words>
<dic:englishWords xmlns:dic = "dictionary">
<dic:title>
English Dictionary
</dic:title>
<dic:author>
<dic:authorsName>
Author:
<dic:name>
User
</dic:name>
<dic:lastName>
Name
</dic:lastName>
</dic:authorsName>
</dic:author>
<dic:words>
<dic:name>Water</dic:name><br/>
<dic:name>Room</dic:name><br/>
<dic:name>Computer</dic:name><br/>
<dic:name>Book</dic:name><br/>
<dic:name>Garage</dic:name><br/>
<dic:name>Car</dic:name><br/>
<dic:name>Ship</dic:name><br/>
<dic:name>Food</dic:name><br/>
<dic:name>Coffee</dic:name><br/>
<dic:name>Program</dic:name><br/>
</dic:words>
</dic:englishWords>
单词列表的路径包含在xml文件中,如下所示:
<dic:dictionary xmlns:dic = "dictionary">
<dic:Logo>Logo</dic:Logo>
<dic:Author>User Name</dic:Author>
<dic:EnglishWords>english</dic:EnglishWords>
<dic:SwedishTranslation>swedish</dic:SwedishTranslation>
<dic:SwedishWords>swedish</dic:SwedishWords>
<dic:EnglishTranslation>english</dic:EnglishTranslation>
</dic:dictionary>
我的转型如下
<!--Declare a parameter with the nodes to be removed-->
<xsl:param name="removeElementsNamed" select="'|dic:author|dic:title'"/>
<!--create a template and call it remove node-->
<xsl:template match="node()|@*" name="removeNode">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!--remove the actual nodes-->
<xsl:template match="*">
<xsl:if test="not(contains($removeElementsNamed, concat('|',name(),'|')))">
<xsl:call-template name="removeNode"/>
</xsl:if>
</xsl:template>
我试图效仿我在这里找到的一个例子:
...但在我的情况下,它不起作用。
任何帮助将不胜感激......
Bluetxxth
答案 0 :(得分:0)
您可以匹配您不想要但不输出任何内容的元素。
<xsl:template match="nodeToMatch" />
答案 1 :(得分:0)
因此,您似乎试图根据$ removeElementsNamed中是否存在|ELEMENTNAME|
来排除元素,但dic:author
是该列表中唯一具有双方管道的项目。如果你这样做,它几乎可以工作:
<xsl:param name="removeElementsNamed" select="'|dic:author|dic:title|'"/>
然而,这有点像黑客。
更好的方法是做这样的事情:
<xsl:template match="dic:author | dic:title" />
这应该从输出中排除dic:author
和dic:title
。
另一个问题是此模板名称错误:
<xsl:template match="node()|@*" name="removeNode">
这个模板实际上会做什么,如果它起作用,将是包含以其方式发送的节点,但模板不能同时具有match
属性和{ {1}}属性。我建议重写你的XSLT,并从这里开始:
name