Laden...

XML Ende-Tag fehlt

Erstellt von wds vor 17 Jahren Letzter Beitrag vor 17 Jahren 3.033 Views
wds Themenstarter:in
61 Beiträge seit 2006
vor 17 Jahren
XML Ende-Tag fehlt

Hallo zusammen,

ich habe das Problem, dass mir mein Endtag fehlt, falls ich keine Kindknoten einfüge.
Wie kann ich diesen erzeugen. CreateElement liefert mir ja laut Doku nur einen Prefix

// Neues Element erstellen und einfügen
XmlNode productsNode = doc.CreateElement("products");			
XmlAttribute productsAttribute = doc.CreateAttribute("cd");
productsAttribute.Value = dudConf.SelectedItem.ToString();
productsNode.Attributes.Append(productsAttribute);			
doc.AppendChild(productsNode);	

Ich erhalte <products cd="abcd"> ohne schließendes Tag

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf."
K.Zuse

476 Beiträge seit 2004
vor 17 Jahren

Original von wds

Ich erhalte <products cd="abcd"> ohne schließendes Tag

also, ich würde behaupten du bekommst <products cd="abcd"/>, was soviel bedeutet wie dass der Tag wieder geschlossen wurde.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

wds Themenstarter:in
61 Beiträge seit 2006
vor 17 Jahren

stimmt du hast Recht.

Ich erhalte
<products cd="abcd"/>

Ich brauche aber unbedingt

<products cd="abcd">
<products/>

da die Datei sonst nicht schemenkonform wäre.

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf."
K.Zuse

476 Beiträge seit 2004
vor 17 Jahren

hallo wds,

du könntest die XML-Daten mit einem XmlTextWriter in einen Stream oder eine Datei schreiben. Der XmlTextWriter hat Methoden wie "WriteFullEndElement" um ein abschliessendes End-Tag zu einem Leerknoten zu schreiben.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

B
1.529 Beiträge seit 2006
vor 17 Jahren

Ich brauche aber unbedingt

<products cd="abcd">
<products/>

da die Datei sonst nicht schemenkonform wäre.

XML-konform müsste es auch

<products cd="abcd">
</products>

heißen, oder halt als Kurzform

<products cd="abcd" />
476 Beiträge seit 2004
vor 17 Jahren

hey Borg,


<products/>

du hast recht, das habe ich in der Eile garnicht bemerkt ;o), aber ich denke wds hat schon </products> gemeint. Andererseits, müsste das Dokument doch als valide gelten, auch wenn kein extra Tag zum schliessen angegeben ist...

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

wds Themenstarter:in
61 Beiträge seit 2006
vor 17 Jahren

8o upps, das stimmt. So wird das Tag wohl nicht geschlossen...
Wie lautet denn das Schema, damit die Kurzform akzeptiert wird?
Anbei der Teil meines Schemas, der die Form des äußeren Knotens vorgibt.


...
<xsd:element name="products">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="product" type="product" maxOccurs="unbounded" />
			</xsd:sequence>
			<xsd:attribute name="cd" type="xsd:string" />
		</xsd:complexType>
</xsd:element>
...

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf."
K.Zuse

21 Beiträge seit 2006
vor 17 Jahren

Hi
Eigentlich sollte ja beides funktionieren.
Was ist denn deine Fehlermeldung?

wds Themenstarter:in
61 Beiträge seit 2006
vor 17 Jahren

Nun, ich erhalte keine Fehlermeldung. Mein Validator liefert mir halt "false" für einen solchen Knoten.

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf."
K.Zuse

21 Beiträge seit 2006
vor 17 Jahren

aha seltsam..
post mal den knoten product vielleicht liegt ja da der hund begraben

wds Themenstarter:in
61 Beiträge seit 2006
vor 17 Jahren

nicht valide:

<products cd="abcd" />

valide:

<products cd="abcd" />
...
</products>

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf."
K.Zuse

J
3.331 Beiträge seit 2006
vor 17 Jahren

Hallo,
also wenn das als ungültig:

<products cd="abcd" />

und das als gültig

<products cd="abcd" />
...
</products>

bezeichnet wird, dann behaupte ich mal, dass das Problem an einem ganz anderen Element liegt und gegen die Regeln zur Verschachtelung verstoßen wird.

Gruß Jürgen

PS. Xml ist nicht mein Arbeitsgebiet; aber soviel habe ich bei meiner Arbeit mit XmlSchema gelernt.

21 Beiträge seit 2006
vor 17 Jahren

ich meinte den knoten für product im xml schema file.
du referenzierst ja mit type="product" darauf. wahrscheinlich erlaubst du dort keinen content.

wds Themenstarter:in
61 Beiträge seit 2006
vor 17 Jahren

Das ist mein Schema:

<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	
	<xsd:complexType name="product">
		<xsd:sequence>
			<xsd:element name="category" type="xsd:string" />
			<xsd:element name="label" type="xsd:string" />
			<xsd:element name="document" type="xsd:string" />
		</xsd:sequence>
		<xsd:attribute name="code" type="xsd:string" />
	</xsd:complexType>	
	
	<xsd:element name="products">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="product" type="product" maxOccurs="unbounded" />
			</xsd:sequence>
			<xsd:attribute name="cd" type="xsd:string" />
		</xsd:complexType>
	</xsd:element>

</xsd:schema>

Es werden zwei XML-Dateien erstellt (Dokument-Sprache deutsch / englisch).
Falls kein Dokument auf Englisch existiert, so muss die Grundstruktur (products) angelegt werden.

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf."
K.Zuse

21 Beiträge seit 2006
vor 17 Jahren

hi
laut deinem schema ist nur folgendes gültig


<products cd="sasa">
   <product>
      <category>asdfa</category>
      <label>asdfdf </label>
      <document> asdfdf </document>
   </product>
</products>

du musst dein schema anpassen
schau am besten bei www.zvon.org
oder gleich bei w3c.org

schau nach dem MIXED oder ANY attribut, weiß nicht auswendig