在SDL Tridion 2011 SP1中使用Tom.NETAPI获取Xhtml字段的完整XMLsource

在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>

我正在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>
        </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);