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# 待定代码:

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”标签出现了多次。我需要提取每个“body”标签内容。为此,我正在使用 HTML 敏捷包。为了使其在 C# TBB 中工作,如何将 HTML 敏捷包 DLL 添加到 Tridion 系统?并且还请在 html 敏捷中提供一个示例代码片段以循环遍历 body 标记。

如果 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 程序集合并为一个,然后您可以将其上传到 Tridion。

于 2012-04-29T16:04:52.853 回答