XSLT尝试添加新节点并添加元素

时间:2014-02-06 14:37:50

标签: xml xslt

目前我正在尝试将单词xml转换为xml文件。 它正试图通过识别风格来做到这一点。

我目前在这里面临问题,因为我对这次XLST转换非常陌生,我正在寻求帮助。

我正在尝试在下面的模板中添加一个名为<standingOrder>的新元素,从我的单词xm看起来像

Word文档文本

  
      
  1. 规划条例(取消有关吉祥物和旅行者的条文)   最多20分钟(常规订单第23号) abc先生请假来携带xxxxxxxxxxxx。备注:会员搬家和   反对这项议案的议员每人最多可发言10分钟。
  2.   

注意:

在上面的文字中,最多20分钟(常规订单No.23)(突出显示)将有一个名为StandingOrderReference的样式,如果找到文本Standing Order No.23,则下面是xslt代码,那么它应该构建一个孩子名为<standingOrder>的节点和值23应该是节点的innertext。为此,我在下面做了,但我无法显示价值。

XSLT

<xsl:when test="@styleId='StandingOrderReference'">
   <xsl:element name="standingOrder">
      <xsl:value-of select="substring-after(.,'(Standing Order  ')"/>
   </xsl:element>
</xsl:when>

我期待

<standingOrder>23</standingOrder>

请纠正我在哪里做错了。 一如既往,我们非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

根据评论,如果您将实际的xml摘录放在帖子中会更好。但是,做出一些假设,以下是xslt:

   <xsl:template match="/xml/someElement">
      <xsl:choose>
         <xsl:when test="@styleId='StandingOrderReference'">
            <xsl:element name="standingOrder">
               <xsl:value-of select="
                 substring-before(
                   substring-after(.,'(Standing Order No. '), 
                   ')')"/>
            </xsl:element>
         </xsl:when>
      </xsl:choose>
   </xsl:template>

解析这份文件:

<xml>
   <someElement styleId="StandingOrderReference">
      **Up to 20 minutes (Standing Order No. 23)** Mr a
   </someElement>
</xml>

要返回您的目标,即:

<standingOrder>23</standingOrder>

请注意,您还需要截断子字符串 - 我使用了substring-before来执行此操作。请注意,xml中的No.后面还有 (Standing Order 一词。