5

C# TBB を作成しています。以下に示すようなXMLコードがあります。

<content>
  <ah>123</ah>
  <ph>456</ph>
  <body>
    <sc>hi</sc>
    <value>aa</value>
    <value>bb</value>
    <value>cc</value>
    <value>dd</value>
    <value>dd</value>
  </body>
  <body>
    <sc>hello</sc>
    <value>ee</value>
    <value>ddff</value>
  </body>
</content>

C# TBB コード:

using (MemoryStream ms = new MemoryStream())
{
XmlTextWriter securboxXmlWriter = new XmlTextWriter(ms, new System.Text.UTF8Encoding(false));
securboxXmlWriter.Indentation = 4;
securboxXmlWriter.Formatting = Formatting.Indented;
securboxXmlWriter.WriteStartDocument();


securboxXmlWriter.WriteStartElement("component");

securboxXmlWriter.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
securboxXmlWriter.WriteAttributeString("xmlns", "http://www.w3.org/1999/xhtml");


securboxXmlWriter.WriteStartElement("content");
securboxXmlWriter.WriteStartElement("wire:wire");
securboxXmlWriter.WriteStartElement("wire:si");

securboxXmlWriter.WriteStartElement("wg:ah");
securboxXmlWriter.WriteElementString("text", package.GetValue("Component.ah"));
securboxXmlWriter.WriteEndElement();

securboxXmlWriter.WriteStartElement("wg:ph");
securboxXmlWriter.WriteElementString("nlt", package.GetValue("Component.ph"));
securboxXmlWriter.WriteEndElement();

securboxXmlWriter.WriteEndElement();
securboxXmlWriter.WriteEndElement();
securboxXmlWriter.WriteEndElement();
securboxXmlWriter.WriteEndElement();
securboxXmlWriter.WriteEndDocument();
securboxXmlWriter.Flush();
securboxXmlWriter.Close();



Item output = package.GetByName("Output");

if (output != null)
{
package.Remove(output);
}

package.PushItem("Output", package.CreateStringItem(ContentType.Xml, Encoding.UTF8.GetString(ms.ToArray())));
}

XML コードで「body」タグが複数回出現します。「本文」タグの内容をすべて抽出する必要があります。その目的のために、私は HTML アジリティ パックを使用しています。C# TBB で動作させるには、HTML アジリティ パック DLL を Tridion システムに追加する方法は? また、body タグをループする HTML アジリティのサンプル コード スニペットを提供してください。

HTML Agility が C# TBB で動作しない場合、"body" タグのコンテンツを取得する方法を教えてください。

よろしくお願いします。

4

3 に答える 3

7

サード パーティの DLL をグローバル アセンブリ キャッシュ (GAC) に配置する必要があります。サンプルのアジリティ パック コードについては、より具体的なタイトルで別の質問をすることをお勧めします。

于 2012-04-27T11:21:02.203 に答える
4

ILMerge を使用すると、GAC に外部 DLL をインストールする手間が省けます。自分のコードを他の誰かのコードとマージして (著作権) 法に違反しないようにしてください。技術的には、実行するのは簡単です。テンプレート DLL がビルドされた後、ビルド後のアクションによって必要な外部 DLL とマージされ、新しい DLL が作成されます。次に、そのマージされた DLL を Tridion にアップロードできます。

例: テンプレート プロジェクトの名前が「MyTemplates」で、ExternalLibraryOne.dll と ExternalLibraryTwo.dll に依存しているとします。行うことは次のとおりです。

  • http://www.microsoft.com/en-us/download/details.aspx?id=17630から ILMerge をダウンロードします(無料です) 。
  • テンプレート ソリューション内に、Solution Items というフォルダーを作成し、そこに ilmerge.exe をコピーします。
  • テンプレート プロジェクトのプロパティを開き、次のビルド後のイベントを追加します。

    "$(SolutionDir)Solution Items\ilmerge"
    /lib:"C:\Windows\Microsoft.NET\Framework\v4.0.30319" /t:dll /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4 .0.30319 /out:"$(TargetDir)$(ProjectName).merged.dll" "$(TargetDir)ExternalLibraryOne.dll" "$(TargetDir)ExternalLibraryTwo.dll" "$(TargetPath)"

  • テンプレート プロジェクトをビルドします。出力フォルダー (bin/Debug または bin/Release) には、MyTemplates.merged.dll というファイルが含まれます。TcmUploadAssembly を使用して、これを Tridion にアップロードできます。

もちろん、これは.NET 4を使用していることを前提としています。

于 2012-04-29T20:07:24.083 に答える
2

ILMergeを使用して、サードパーティのDLLとTBBアセンブリを1つにマージし、Tridionにアップロードすることもできます。

于 2012-04-29T16:04:52.853 に答える