巨大な文字列を分析しようとしていますが、XSLTで2つの異なるメソッドを使用しています(1つはtokenizeと呼ばれ、もう1つはanalyze stringと呼ばれます)。
次の文字列があるとします。
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>
どうもありがとうございます!