我正在尝试分析一些巨大的字符串,并且我在 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="("stages":[^\]]*)">
<xsl:matching-substring>
<xsl:value-of select="replace(regex-group(1), ', '', ',-'')"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="regex-group(1)"/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:variable>
非常感谢!