Domanda

Come si imposta un valore di una proprietà XML?

Questo è quello che ho provato senza successo:

<property name="Resources" value="&#60;resources/&#62;"/>

Resources è un campo XmlDocument.

È stato utile?

Soluzione

Giusto per chiarire:. Questa struttura si trova su un oggetto che ha un campo che è un XmlDocument, e si desidera che venga inizializzato a un XmlDocument vuota con le "risorse" elemento radice

XMLDocument non sono sempre gli oggetti più facili con cui lavorare, soprattutto quando si tratta di costruzione.

Primavera di sicuro non si sa come trasformare una stringa in un XmlDocument.

Si potrebbe trovare più facile usare il codice per generare il XmlDocument che si desidera. Ad esempio, creare un metodo di supporto statica che genera il XmlDocument, e impostare il valore della proprietà invocando quel metodo.

Un'altra opzione (kludge-y) è quello di avere una proprietà "aiuto" che si occupa di XML come stringa. Ad esempio, una proprietà chiamata "_ResourcesXml", che si dovrebbe impostare su null o "". La proprietà sarebbe quindi costruire il XmlDocument e impostare il campo supporto per la proprietà Resources. Allo stesso modo, la lettura _ResourcesXml potrebbe tornare Resources.OuterXml.

Altri suggerimenti

Penso che si può ottenere il risultato richiesto con qualcosa di simile (utilizzando il MethodInvokingFactoryObject):

  <object id="Document" type="System.Xml.XmlDocument, System.Xml" />
  <object type="Spring.Objects.Factory.Config.MethodInvokingFactoryObject, Spring.Core">
    <property name="TargetObject">
      <ref local="Document" />
    </property>
    <property name="TargetMethod" value="AppendChild" />
    <property name="NamedArguments">
      <dictionary>
        <entry key="newChild">
          <object type="Spring.Objects.Factory.Config.MethodInvokingFactoryObject, Spring.Core">
            <property name="TargetObject">
              <ref local="Document" />
            </property>
            <property name="TargetMethod" value="CreateElement" />
            <property name="NamedArguments">
              <dictionary>
                <entry key="name" value="resources" />
              </dictionary>
            </property>
          </object>
        </entry>
      </dictionary>
    </property>
  </object>

In ogni caso, questo sembra molto complesso per il piccolo effetto che si ottiene. Come già detto Nader è una buona idea per creare una piccola fabbrica aiutante.

Un'altra opzione è quella di utilizzare espressioni . È possibile chiamare i metodi all'interno della configurazione, ad esempio, come segue:

<object id="..." type="..." expression="@(Document).CreateElement('resources')" />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top