1

我正在尝试分析一些巨大的字符串,并且我在 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", 
}]

当我尝试创建每个数据的项目时,我的问题就出现了。我的正则表达式如下, (.,',\s+"') -这意味着每次匹配 a , ' 时,我都可以将一个数据与另一个数据区分开来。

但,

在阶段数据中,我也有这些字符串 (, '),因此我将它们创建为单独的项目,而我想将它们创建为阶段的子项 - 创建一个名为 <stage-itmes> 的特殊项目元素。

也就是说,只有当我看到以以下字符“[{”(如分阶段)开头的数据时,我才想以某种方式将文本(。')重新格式化为其他内容,因此将来我将使用此标记化字符串(, ') 这些字符串不匹配。

我希望我能够清楚地解释自己,我可能使用了错误的方法来做到这一点。我想得到的最终结果是:

    <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>

非常感谢!

4

2 回答 2

1

您可以在此处找到一个完全用 XSLT 2.0 编写的针对 json.org 中描述的 JSON 语法的解析器——这不是完整的或官方的 JSON 语法,因此解析器可能会或可能不会处理您的数据——只需给它一个尝试。

于 2013-02-20T04:04:29.987 回答
1

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

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

我相当怀疑,因为您尝试以错误的方式执行此操作,因此您对解析很陌生,在这种情况下,我建议您先阅读该主题,然后再进一步。

于 2013-02-18T18:52:45.430 回答