【问题标题】:Changing xml content when converting it to HTML via xslt通过 xslt 将其转换为 HTML 时更改 xml 内容
【发布时间】:2012-07-26 04:18:42
【问题描述】:

我需要通过 XSLT 和 java 将 XML 文件转换为 HTML 格式。其中一个标签包含内网页面的链接,如:

http://mycompany.com&mypage=xyz&version=999

现在我想在生成的 html 的 href 属性中使用这个值。

在使用这个值之前,我想去掉“amp;”并更改网址,例如将其附加用户名。

我可以通过一些 XSLT 函数来实现,还是必须在 java 代码中替换它?

【问题讨论】:

    标签: java xslt


    【解决方案1】:

    我可以通过一些 XSLT 函数来实现吗,或者我必须在 java 中替换它 代码?

    这在 XSLT 中是微不足道的。

    这种转变

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output omit-xml-declaration="yes" indent="yes"/>
     <xsl:param name="pUserName" select="'someUser'"/>
    
     <xsl:template match="someLink">
         <a href="{substring-before(., '?')}/{$pUserName}">someLink</a>
     </xsl:template>
    </xsl:stylesheet>
    

    应用于此 XML 文档时

    <someLink>http://mycompany.com?mypage='xyz'&amp;version='999'</someLink>
    

    产生想要的正确结果

    <a href="http://mycompany.com/someUser">someLink</a>
    

    【讨论】:

    • 感谢您的回答,我会尝试并告诉您。我也可以通过一些系统属性动态地给用户名吗?
    • @KshitijGupta:这很可能可以做到——如何将外部参数传递给 XSLT 转换取决于实现(供应商)。阅读您正在使用的 XSLT 处理器的文档,并且必须有一个关于此主题的部分。如果您找不到此信息,请提出一个新问题,有人可能会分享应该如何做到这一点。
    【解决方案2】:

    试试 fn:replace(string,pattern,replace) 和 fn:concat(string,string,...)

    返回通过用替换参数替换给定模式创建的字符串 示例:replace("Bella Italia", "l", "") 结果:'Be*a Ita*ia'

    示例:replace("Bella Italia", "l", "") 结果:'Bea Itaia'

    fn:concat(string,string,...) 返回字符串的串联 示例: concat('XPath ','is ','FUN!') 结果:'XPath 很有趣!'

    参考:http://www.w3schools.com/xpath/xpath_functions.asp

    注意:请确保您使用的是 XSLT 2.0 版,因为替换功能仅在 XSLT 2.0 版中可用,在 1.0 版中不可用

    【讨论】:

      【解决方案3】:

      首先你给定的链接不起作用,

      http://mycompany.com?mypage=xyz&version=999.

      我想你只是想在java中将你的xml转换成html。

      为此访问此讨论。 suggestions-for-a-java-based-templating-engine

      这是由模板引擎完成的,java中广泛使用的模板引擎是Freemarker和velocity。其他的也可以。

      这里是 Java 模板引擎的列表。 Java Template Engines

      【讨论】:

        【解决方案4】:

        如果您想在 URL 中按原样写入 & 字符而不是 &使用禁用输出转义。使用 concat 函数将您想要的任何其他内容附加到 url。

        <xsl:value-of select="$url" disable-output-escaping="yes"/>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-03
          • 1970-01-01
          • 2023-03-26
          • 2013-06-18
          • 1970-01-01
          • 1970-01-01
          • 2014-03-08
          • 2012-09-29
          相关资源
          最近更新 更多