2

私のxsltには、C#コードがあります。

public string CleanForTableTags(string pContent){

        string input = String.Concat("<root>", pContent, "</root>");

    System.Xml.Linq.XDocument doc = System.Xml.Linq.XDocument.Parse(input, System.Xml.Linq.LoadOptions.PreserveWhitespace);

    var valueWithinTags = doc.Root.Element("table").ToString();
    string[] values = Regex.Matches(valueWithinTags, @"<.*?>")
        .Cast<Match>()
        .Select(o => o.Groups[0].Value)
        .ToArray();

    System.Guid d = System.Guid.NewGuid();
    string s = pContent.Replace(valueWithinTags, d.ToString());

    return s;
}

あなたが見ることができるように私は使用します:System.Xml.Linq

私のwebconfigiveで得た:

    <compilation debug="true">
        <assemblies>
            <add assembly="WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
            <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
            <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/></assemblies>
    </compilation>

そしてまだ私は得ています:

タイプまたは名前空間の名前「Linq」が名前空間「System.Xml」に存在しません(アセンブリ参照がありませんか?)

私は何が間違っているのですか?

私はVS2008を使用しています。DLLへのすべてのパスは正しいです。クラスから同じコードを使用すると問題なく動作しますが、xslt内で使用するとすぐに、エラーが発生します。

次の問題:

今、その失敗

string[] values = Regex.Matches(valueWithinTags, @"<.*?>")
            .Cast<Match>()
            .Select(o => o.Groups[0].Value)
            .ToArray();



'System.Text.RegularExpressions.MatchCollection' does not contain a definition for 'Cast' and no extension method 'Cast' accepting a first argument of type 'System.Text.RegularExpressions.MatchCollection' could be found (are you missing a using directive or an assembly reference?)
4

1 に答える 1

4

「xsltの内部」とは正確にはどういう意味ですか?

XSLTは、変換を含む単なるxmlファイルです。または、msxsl名前空間を使用して、C#を使用するスクリプトの一部を含めていますか?

その場合、おそらく変換ファイル内に含める<msxsl:assembly name="System.Xml.Linq" /> だけでなく、使用 する必要があります。<msxsl:using namespace="System.Xml.Linq" />

変換内にスクリプトを含める方法の例を次に示します。http://docs.composite.net/FAQ/Developer ?q = How + to + run + CSharp + function + in + XSLT%3F

2番目の部分に関しては、Cast<>これは拡張メソッドであるため、名前空間を「using」としてSystem.Linq.Enumerable追加するだけで十分です(アセンブリとしても含まれていることを確認してください)。System.LinqSystem.Core

于 2012-07-07T23:39:34.040 に答える