【问题标题】:Formatting phone number to in XSLT2.0在 XSLT 2.0 中将电话号码格式化为
【发布时间】:2017-06-09 09:58:14
【问题描述】:

我正在使用 XSLT 2.0。输出数据必须是 csv 文件。对于电话号码列,它是通过以下方式从 XML 中简单选择:

<xsl:value-of select="ns:phone[ns:is_primary = 'true']/ns:phone_number"/>

当我在 csv 文件中查看输出时,有几个数字为“9.12234E+11”。我试着把它改成这样的字符串:

<xsl:value-of select="ns:phone[ns:is_primary = 'true']/format-number(ns:phone_number,'############')"/>

但是,这无济于事。我怎样才能做到这一点?

【问题讨论】:

  • 请发布一个最小但完整的 XML 输入文档、XSLT 样式表以及有关使用的 XSLT 处理器的信息,以便我们重现问题。我不明白为什么&lt;xsl:value-of select="ns:phone[ns:is_primary = 'true']/ns:phone_number"/&gt; 会输出指数格式,除非输入有这种格式。
  • 花一分钟时间阅读指南:How to Ask,其中包含许多有用的信息,说明问题中应包含哪些内容以帮助我们帮助您
  • 您如何查看 CSV 文件?例如,您是否在 Microsoft Excel 中查看它?这可能会以指数形式自动格式化长数字。您可以通过格式化电话号码来解决此问题,以便在区号后有一个空格。

标签: xml csv xslt


【解决方案1】:

在没有具体信息的情况下,我的猜测是您正在进行架构感知转换,并且架构将 phone_number 字段定义为数字。

现在,数字是电话号码字段的错误选择。验证电话号码可能没问题,但语义是错误的:例如,将其定义为数字会使前导零(或前导“+”号)无关紧要。如您所见,它会导致格式不正确。

电话号码应在架构中定义为具有类似\+?[0-9]+ 的模式的字符串(如果您知道自己的数据,可以将其更改为更宽松或更严格)。

如果您无法更改架构,您可以(取决于处理器)使用ns:phone-number/text() 恢复原始词法表示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多