【问题标题】:Matching expression inside of a data section of an xml element using xsl使用 xsl 在 xml 元素的数据部分内匹配表达式
【发布时间】:2011-01-17 02:09:27
【问题描述】:

您好,我通常使用 c++ 编程,所以 XML/XSL/XPATH 不是我的强项,但我需要进行转换,但我似乎找不到一个好的方法。

我们有一个格式如下的 xml 文件:

<outer>
  <element/>
  <other_element/>
  <message pri="info">
    [[!CDATA Error: something is not working]] 
  </message>
  <message pri="info">
    [[!CDATA Warning: warnings are boring]] 
  </message>
</outer>

我需要一个可以将其转换为完全相同的 xml 文件的 xsl,但它与“Error:”部分匹配,并将 pri 属性更改为“error”。

我需要使用 xsl 转换来完成这项工作,并且我已经开始研究 XPATH,但我很难找到如何完成这项工作。

我已经将消息与 a 匹配

<xsl:template match="message">
  <xsl:choice>
    <xsl:when test="tricky part">
    </xsl:when>
    <xsl:otherwise>
      <xsl:justcopythetag>
    </xsl:otherwise>
  </xsl:choice>
</xsl:template>

我已经找到了如何复制其他消息标签,但我不知道如何匹配“错误”部分。

谁能帮帮我?

【问题讨论】:

    标签: xml xpath xslt transform match


    【解决方案1】:

    您只是在寻找字符串“Error:”,对吗?

    <xsl:when test="contains(text(),'Error:')">
    </xsl:when>
    

    如果第一个参数包含第二个参数,contains() 返回 true。

    【讨论】:

    • 那么 text() 会引用匹配的节点吗?我知道了。谢谢
    • text() 特指节点的字符串内容。在大多数情况下没有必要,但我个人觉得使用text() 比使用. 更清晰、更容易理解。
    【解决方案2】:
    ...
    <xsl:when test="contains(., 'Error')">
        <message pri="error"><xsl:value-of select="."/></message>
    </xsl:when>
    ...otherwise
    

    【讨论】:

    • 这很棒。这看起来像是我的问题的完整解决方案。可惜我不能分开我的答案......
    • 一个问题,这不是真的在已经匹配的标签中放置了一个标签吗?
    • 您匹配的 标记不会自动转换为生成的 XML/HTML/任何文档。您必须明确说明要发布的内容(在这种情况下是原始消息或更改后的消息)。
    • 我明白,但是当说 时 select="."包含匹配的 ?
    • 只是开始标签和结束标签之间的“内部”部分。
    猜你喜欢
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2015-08-26
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多