仅在其他类型的标记将跟随时转换标记

时间:2012-02-09 10:25:28

标签: xslt xslt-1.0

我想修改现有的xsl文件,以便只有在跟随另一个不是此标记的兄弟时,才会转换源文档中的标记<Empty>。一种截断这些标签到最后。

目前我有:

...
<xsl:template match="Expression">
    <xsl:value-of select="."/>
</xsl:template>
<xsl:template match="Empty">
    <xsl:value-of select="."/>
</xsl:template>

可以用xslt实现吗?

示例输入

<root>
  <dummy1>Test1</dummy1>
  <Empty>Empty1</Empty>
  <Empty>Empty2</Empty>
  <dummy2>Test2</dummy2>
  <Empty>Empty3</Empty>
  <Empty>Empty4</Empty>
  <Empty>Empty5</Empty>
</root>

期望的输出: Test1Empty1Empty2Test2

4 个答案:

答案 0 :(得分:1)

请使用XSLT发布一个小输入样本和您想要创建的相应结果。在XPath中有一个兄弟轴,所以做例如:

<xsl:template match="Empty[following-sibling::*[1][not(self::Empty)]]">
  <!-- now transform here as needed -->
</xsl:template>

匹配任何Empty元素,后跟另一个不是Empty元素的元素,但我不确定您是否需要以及您希望在模板内执行的操作。

答案 1 :(得分:1)

假设输入XML为:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <dummy1>test</dummy1>
  <Empty>do-not-copy</Empty>
  <Empty>copy-this1</Empty>
  <dummy2>test</dummy2>
  <Empty>do-not-copy-this2</Empty>
</root>

在上面的XML中,第二个元素<Empty>do-not-copy</Empty>的下一个兄弟作为<Empty>copy-this1</Empty>,所以不应该选择它。其中第三个元素后跟<dummy2/>所以它应该被复制..
第五个元素是<Empty>copy-this2</Empty>它后面没有任何标记..所以它也应该被删除:)

这是XSL代码:

  <xsl:template match="Empty[following-sibling::*[1][name()!='Empty']]">
    <xsl:value-of select="."/>
  </xsl:template>

答案 2 :(得分:0)

我将建议的解决方案修改为以下内容:

<xsl:template match="Empty[following-sibling::*[not(self::Empty)]]">
    <xsl:value-of select="."/>
</xsl:template>

似乎有用。

答案 3 :(得分:0)

我正在添加一个新答案..

如果这是你的XML:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <dummy>test</dummy>
  <Empty>copy-this</Empty>
  <Empty>copy-this1</Empty>
  <dummy>test</dummy>
  <Empty>copy-this</Empty>
  <Empty>copy-this1</Empty>
  <dummy>test</dummy>
  <Empty>donot-copy-this2</Empty>
  <Empty>donot-copy-this2</Empty>
</root>

XSLT:示例代码..

  <xsl:template match="dummy">
    <xsl:value-of select="."/>
  </xsl:template>
  <xsl:template match="Empty[following-sibling::*[name()!='Empty']]">
    <xsl:value-of select="."/>
  </xsl:template>
  <xsl:template match="text()"/>

输出:

testcopy-thiscopy-this1testcopy-thiscopy-this1test