在SDL Tridion 2011 SP1中使用Tom.NETAPI获取Xhtml字段的完整XMLsource
我正在SDL Tridion 2011 SP1中开发Tom.NETAPI。 我试图检索XHTML字段的“源”部分 我的消息来源是这样的在SDL Tridion 2011 SP1中使用Tom.NETAPI获取Xhtml字段的完整XMLsource,tridion,Tridion,我正在SDL Tridion 2011 SP1中开发Tom.NETAPI。 我试图检索XHTML字段的“源”部分 我的消息来源是这样的 <Content> <text> <p xmlns="http://www.w3.org/1999/xhtml">hello all<strong> <a id="ID1" href="#" name="ZZZ">Name</a>
<Content>
<text>
<p xmlns="http://www.w3.org/1999/xhtml">hello all<strong>
<a id="ID1" href="#" name="ZZZ">Name</a>
</strong></p>
</text>
</Content>
我没有得到任何输出。更多的是,我得到的计数为零
我得到的输出:
计数:0
虽然我在字段中有一些子标记,但我不明白为什么0作为Count
出现
有什么建议需要修改吗
多谢各位
textValuesss.Definition.ExtensionXml
这是错误的属性(定义导致架构字段定义,ExtensionXml用于扩展编写的自定义XML数据)
您希望改用textValuesss.Value并将其作为XML加载。之后,您可能应该将SelectSingleNode与包含XHTML命名空间的特定XPath查询一起使用。或者使用Linq to XML查找元素。ItemField.Definition提供对字段的架构定义的访问,而不是字段内容的访问,因此您不应该使用ExtensionXml属性访问内容(这就是为什么它是空的)。此属性用于在架构定义中存储扩展数据 要处理包含XML/XHTML内容的字段,我只需访问组件的content属性,因为它已经是一个XmlElement。您需要注意内容的名称空间,因此在查询此XmlElement时使用XmlNamespaceManager。例如,以下内容将为您提供对名为“text”的字段的引用:
XmlNameTable nameTable = new NameTable();
XmlNamespaceManager nsManager = new XmlNamespaceManager(nameTable);
nsManager.AddNamespace("custom", sourceComp.Content.NamespaceURI);
XmlElement fieldValue = (XmlElement)sourceComp.Content.SelectSingleNode(
"/custom:Content/custom:text", nsManager);
他正在搜索多个锚,因此.SelectNodes()会更好。要点是使用XPath,而不是在子节点上循环。
XmlNameTable nameTable = new NameTable();
XmlNamespaceManager nsManager = new XmlNamespaceManager(nameTable);
nsManager.AddNamespace("custom", sourceComp.Content.NamespaceURI);
XmlElement fieldValue = (XmlElement)sourceComp.Content.SelectSingleNode(
"/custom:Content/custom:text", nsManager);