【问题标题】:Fetch an XML node-name as regex in XSL Stylesheet transformation在 XSL 样式表转换中获取 XML 节点名称作为正则表达式
【发布时间】:2016-11-10 08:53:46
【问题描述】:

我有一个 XML(根据 XML 标准,我知道它是不正确的,但由于我正在处理来自外部方的响应,所以我只能进行更改),如下所示,

 XML Snippet : <root>
                 <3party>some_value</3party>
               </root>

我想在 XSL 样式表转换中从 sn-p 上方获取 。事实是 元素是无效的,所以我不能像下面这样引用它,因为它无法通过 xsl 编译。我需要一种方法来将其称为部分元素可能正在使用某种 regx 方式?以下不正确。

   <xsl:variable select="$response/root/3party" />

任何答案都会帮助我。

编辑:上述用例的可能解决方案是。

<xsl:for-each select="$response/root">
    <!-- Node name -->
         <xsl:variable name="name" select="local-name()" />
     <!-- check if it contains party -->
         <xsl:if test="contains($name, 'party')">
             <!-- Node value -->
             <xsl:variable name="value" select="node()" />
         </xsl:if>
</xsl:for-each>

【问题讨论】:

  • 我找到了解决方案如下,遍历所有 XML 节点并使用 XSL 函数检查部分名称。用答案编辑了我的问题。
  • “我有一个 XML(我知道根据 XML 标准它是不正确的,但我在处理来自外部方的响应时仅限于更改)” - 您没有 XML。你有什么奇怪的东西。不要尝试使用 XML 工具来处理非 XML。当您处理不是 XML 的内容时,不要将您的问题标记为 XML。
  • @MichaelKay 我正在处理 XSL 转换中的 XML 数据。
  • @TechBreak 您的输入不是 XML,XSLT 无法处理。寻找另一个工具。或者修复产生您输入的工具。
  • @MichaelKay 我已经给出了 XML 输入和一个可行的解决方案。 XSL 编译对我来说也很成功。

标签: java regex xml xslt-1.0


【解决方案1】:

关于添加到您的问题的代码:

<xsl:for-each select="$response/root">
    <!-- Node name -->
         <xsl:variable name="name" select="local-name()" />
     <!-- check if it contains party -->
         <xsl:if test="contains($name, 'party')">
             <!-- Node value -->
             <xsl:variable name="value" select="node()" />
         </xsl:if>
</xsl:for-each>

测试contains($name, 'party')永远返回 true。上下文节点的名称是root,“root”不包含“party”。


更笼统地说:您似乎认为问题在于如何编译您的 XSLT 样式表。事实并非如此。这里真正的问题是您的输入不是格式正确的 XML。输入必须在转换之前进行解析,如果它不是格式良好的 XML,那么在考虑您的样式表之前,该过程就会失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2013-09-06
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多