1

巨大な文字列を分析しようとしていますが、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="(&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

文字列の例を示しましたが、その文法は示していません。これはJSONに非常によく似ており、その場合は、正規表現ではなく再帰文法です。つまり、正規表現を使用して解析することはできません。

XSLTから呼び出すことができるものを含め、JSONをXMLに変換するユーティリティはたくさんあります(Saxonにはparse-json拡張関数があります)。または、独自のパーサーを作成することもできます。DimitreNovatchevにはXSLTで記述された複雑なパーサーの例があり、GuntherRademacherは文法のXML記述からパーサーを生成するためのツールであるREXを公開しています。

あなたがこれを間違った方法でやろうとしているので、あなたは構文解析にかなり慣れていないので、私はむしろ疑っています。その場合、私はさらに先に進む前に主題を読むことをお勧めします。

于 2013-02-18T18:52:45.430 に答える
1

json.orgで説明されているように、JSON文法用にXSLT 2.0で完全に記述されたパーサーをここで見つけることができます-これは完全または公式のJSON文法ではないため、パーサーはデータで機能する場合と機能しない場合があります-試す。

于 2013-02-20T04:04:29.987 に答える