在XSL样式表转换中获取XML节点名称作为regex

时间:2016-11-10 08:53:47

标签: java regex xml xslt-1.0

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

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

我想获取&lt; 3party&gt;从XSL样式表转换中的上面片段。事实是&lt; 3party&gt;元素无效,所以我不能像下面那样引用它,因为它没有通过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>

1 个答案:

答案 0 :(得分:0)

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

<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,那么即使考虑样式表,该过程也会很好地失败。