2

コア サービスを使用して Tridion のコンポーネントを更新中にエラーが発生しました

ルート要素は名前空間にある必要があります

私のコード:

ComponentData  component = client.Read(webDavPath, readOptions) as ComponentData;
component = client.TryCheckOut(webDavPath, readOptions) as ComponentData;
//XDocument dom = XDocument.Parse(component.Content);
//// do your modifications to dom
//component.Content = dom.ToString();
doc.Load(filePath);
sw = new StringWriter();
xw = new XmlTextWriter(sw);
doc.WriteTo(xw);
component.Content = sw.ToString();
//client.CheckOut(webDavPath, true, readOptions);
client.Update(component, readOptions);
client.Save(component, readOptions);
client.CheckIn(component.Id, readOptions);

//client.Update(component, new ReadOptions());
// component = client.Update(component, readOptions) as ComponentData;
4

2 に答える 2

7

コンポーネントに新しいフィールドを追加するときは、スキーマの名前空間を指定する必要があります。

コードでスキーマの名前空間を取得し、新しいフィールドを追加するときにこれを使用できます。

コンテンツを更新するために使用しているコードを示していないため、問題のコンテキストで示すのは困難ですが、以下の例が役立つ場合があります。(既存のコンポーネントから開始するため、少し異なる場合があります)

// get namespace from component schema
SchemaData sd = client.Read(_componentSchemaTcmId, null) as SchemaData;
XNamespace ns = sd.NamespaceUri;

//create/update content
XElement contentXml = new XElement(ns + "news");
contentXml.Add(new XElement(ns + "title", "Title"));
contentXml.Add(new XElement(ns + "sub_title", "Sub Title"));

component.Content = contentXml.ToString();

client.Update(component, readOptions);また、両方が必要だとは思わないclient.Save(component, readOptions);

これで問題が解決しない場合は、完全なコードを投稿してください。

于 2012-05-23T06:55:25.643 に答える
2

スキーマにはいくつかの名前空間があります。たとえば、ここに私のスキーマがあります。

<xsd:schema elementFormDefault="qualified" targetNamespace="uuid:ce656a4c-71e8-407f-8734-26a60da2440a" xmlns="uuid:ce656a4c-71e8-407f-8734-26a60da2440a" xmlns:tcmi="http://www.tridion.com/ContentManager/5.0/Instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.tridion.com/ContentManager/5.0/Instance"></xsd:import>
<xsd:annotation>
    <xsd:appinfo>
        <tcm:Labels xmlns:tcm="http://www.tridion.com/ContentManager/5.0">
            <tcm:Label ElementName="text" Metadata="false">text</tcm:Label>
        </tcm:Labels>
    </xsd:appinfo>
</xsd:annotation>
<xsd:element name="Content">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="text" minOccurs="1" maxOccurs="1" type="xsd:normalizedString">
                <xsd:annotation>
                    <xsd:appinfo>
                        <tcm:ExtensionXml xmlns:tcm="http://www.tridion.com/ContentManager/5.0"></tcm:ExtensionXml>
                    </xsd:appinfo>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

"uuid:ce656a4c-71e8-407f-8734-26a60da2440a"これがスキーマの名前空間であることに注意してください。コンポーネントのルート要素は同じ名前空間にある必要があります。対応するコンポーネントソースは次のとおりです。

<Content xmlns="uuid:ce656a4c-71e8-407f-8734-26a60da2440a">
    <text>Some text</text>
</Content>

コンポーネントの名前空間が正しくない場合-あなたが持っているような例外が発生します。これで問題が解決しない場合は、スキーマとコンポーネントのソースを投稿してください。

于 2012-05-23T06:42:43.920 に答える