2010-02-12 10 views
5

Ich muss in der Lage sein, ein Attribut mit einem Präfix in einem XML-Element zu definieren.Wie XmlElement Attribute mit Präfix erstellen?

Zum Beispiel ...

<nc:Person s:id="ID_Person_01"></nc:Person> 

Um obwohl dieses Ich zu tun, dass die folgenden würde gearbeitet haben.

XmlElement TempElement = XmlDocToRef.CreateElement("nc:Person", "http://niem.gov/niem/niem-core/2.0"); 
TempElement.SetAttribute("s:id", "http://niem.gov/niem/structures/2.0", "ID_Person_01"); 

Leider XmlElement.SetAttribute (string, string, string) scheint nicht Parsen des Präfix zu unterstützen, wie ich den Fehler unten erhalten.

Das Zeichen ':', Hexadezimalwert 0x3A, kann nicht in einem Namen enthalten sein.

Wie würde ich ein Attribut mit Präfix definieren?

Antwort

16

Wenn Sie Ihren Namespace bereits im Stammknoten deklariert haben, müssen Sie nur den SetAttribute-Aufruf ändern, um den Attributnamen ohne Präfix zu verwenden. Also, wenn Ihr Wurzelknoten einen Namespace wie folgt definiert:

<People xmlns:s='http://niem.gov/niem/structures/2.0'> 

Sie können dies tun, und das Attribut wird das Präfix Sie bereits etabliert abholen:

// no prefix on the first argument - it will be rendered as 
// s:id='ID_Person_01' 
TempElement.SetAttribute("id", "http://niem.gov/niem/structures/2.0", "ID_Person_01"); 

Wenn Sie noch nicht die erklärt haben, Namensraum (und dessen Präfix), die dreisaitige XmlDocument.CreateAttribute Überlastung wird es für Sie tun:

// Adds the declaration to your root node 
var attribute = xmlDocToRef.CreateAttribute("s", "id", "http://niem.gov/niem/structures/2.0"); 
attribute.InnerText = "ID_Person_01" 
TempElement.SetAttributeNode(attribute); 
+0

Dies habe ich bereits den Namespace im Wurzelknoten hatte einfach das Präfix aus dem ersten Argument zu entfernen hatte von SetAttribute-Methode, Danke! – Eddie

+1

Sehr hilfreich.Ein kleines Ding - Es gibt einen Gleichheits/Zuweisungsoperator, der 'XmlAttribute-Attribut = xmlDocToRef.' fehlt –

1

Versuchen Sie das Attribut direkt und Zugabe zu dem Element zu erstellen:

XmlAttribute attr = XmlDocToRef.CreateAttribute("s", "id", "http://niem.gov/niem/structures/2.0"); 
attr.InnerText = "ID_Person_01"; 
TempElement.Attributes.Append(attr); 
2

Die Methode XMLDocument.CreateAttribute kann 3 Zeichenfolgen annehmen: Angegebenes Präfix, LokalerName und NamespaceURI. Sie könnten dann das Attribut zum Element hinzufügen. So etwas wie dies könnte für Sie arbeiten:

XmlAttribute newAttribute = XmlDocToRef.CreateAttribute("s", "id", "http://niem.gov/niem/structures/2.0"); 
TempElement.Attributes.Append(newAttribute): 
0

Da meine Suche mich gehalten hier nehmen, ich werde dies für XElement beantworten. Ich weiß nicht, ob diese Lösung auch für XmlElement gilt, aber es wird hoffentlich zumindest anderen helfen, die XElement verwenden, die hier enden.

Basierend auf this habe ich alle Datenknoten in einer Vorlage um xml:space="preserve" erweitert, bevor ich nach oben schaue und deren Inhalt hinzufüge. Es ist komisch Code IMO (ich würde drei Parameter bevorzugen, wie oben gezeigt, aber es macht den Job..

foreach (XElement lElement in root.Descendants(myTag)) 
{ 
     lElement.Add(new XAttribute(root.GetNamespaceOfPrefix("xml") + "space", "preserve")); 
} 
Verwandte Themen