XSLT分析字符串和标记化的正确使用



我正在尝试分析一些巨大的字符串,我在XSLT中使用了两种不同的方法(一种称为标记化,另一种名为分析字符串)。

假设我有以下字符串:

    var ActivitiesData = 
[{"method": {"name": "Bras", "val": "Vegas"}, 
"laundry": "-<a href="http://www.site.com" target="_blank">OnCase</a>:   #9", 
"XSD": "true", 
"stages": [{"name": "on_site", "DB": "12", "OVL": true, "RVT: "BGD"}, {"name": "on_site", "DB": "12", "OVL": true, "RVT": true}], 
"NationalUsage": "Degree", 
"Overlay": 32, 
"Build_Tick": "12", 
"Mozilla": {"Cloud": "Visual", "Decrease": "10"}, 
"updates": "XXX", 
}]

当我试图创建每个数据项时,我的问题就出现了。我的REGEX如下,(.,',\s+"')-这意味着每次a,'匹配时,我都可以区分一个数据和另一个数据。

但是,

在stages数据中,我也有这些字符串(,'),因此我将它们创建为单独的项,而我希望将它们创建成stages的子项-创建一个名为<分期付款>。

也就是说,只有当我看到以以下字符"[{"开头的数据时(就像在阶段中一样),我才想以某种方式将文本(.')重新格式化为其他内容,所以在将来我使用这个标记化字符串(,')时,这些字符串将不匹配。

我希望我能清楚地表达自己,我可能使用了错误的方法。我想得到的最终结果是:

    <item>
    "method": {"name": "Bras", "val": "Vegas"}, 
</item>
<item>
    "laundry": "-<a href="http://www.site.com" target="_blank">OnCase</a>:   #9", 
</item>
<item>
    "XSD": "true", 
</item>
<item>
    "stages": [{"name": "on_site", "DB": "12", "OVL": true, "RVT: "BGD"}, {"name": "on_site", "DB": "12", "OVL": true, "RVT": true}], 
</item>

..and so on..

这是我在试图捕获这些阶段数据时使用的分析字符串,以便将字符串(,')替换为一些独特的字符串,这些字符串稍后将不会在我的标记化中捕获,并将创建单个元素:

<xsl:variable name="pTokenize">    

<xsl:analyze-string select="normalize-space($activitiesDataText)" regex="(&quot;stages&quot;:[^]]*)">
    <xsl:matching-substring>
        <xsl:value-of select="replace(regex-group(1), ', &apos;', ',-&apos;')"/>
    </xsl:matching-substring>
    <xsl:non-matching-substring>
        <xsl:value-of select="regex-group(1)"/>
    </xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:variable>

非常感谢!

您可以在这里找到一个完全用XSLT2.0为JSON.org/中描述的JSON语法编写的解析器——这不是完整的或官方的JSON语法,所以解析器可能会也可能不会处理您的数据——试一下吧。

您已经给出了一个字符串示例,但还没有向我们展示它的语法。它看起来很像JSON,如果是这样的话,那么它是递归语法,而不是正则语法,这意味着它不能使用正则表达式进行解析。

有很多实用程序可以将JSON转换为XML,包括可以从XSLT调用的实用程序(Saxon有一个解析JSON扩展函数)。或者您可以编写自己的解析器:Dimitre Novatchev有用XSLT编写的复杂解析器的例子,Gunther Rademacher发布了REX,这是一种根据语法的XML描述生成解析器的工具。

我很怀疑,既然你试图用错误的方式来做这件事,那你对解析还相当陌生,在这种情况下,我建议你在进一步研究之前先读一读这个主题。

相关内容

  • 没有找到相关文章

最新更新