2010-11-24 15 views
0

Ich habe ein XML mit folgendem Format.XML-Validierung mit XSD

<RootNode> 
    <Parent> 
     <Child1>Some text about child 1</Child1> 
     <Child2>Some text about child 2</Child2> 
     .... 
     .... 
     <Child5>Some text about child 5</Child5> 
     .... 
     .... 
     <Childn>Some text about child n</Childn> 
    </Parent> 
</RootNode> 

Jetzt möchte ich dieses XML gegen xsd validieren.

Aber das Problem ist die Nummer und der Knotenname von Kindern sind nicht behoben.

Bitte überprüfen Sie folgende Beispiele meiner Datei

Beispiel 1: Zwei Kinder mit Knotennamen Child1 und Child2

<RootNode> 
    <Parent> 
     <Child1>Some text about child 1</Child1> 
     <Child2>Some text about child 2</Child2> 
    </Parent> 
</RootNode> 

Probe 2: Drei Kinder mit Knotennamen Child4 Child5 und Child8

<RootNode> 
    <Parent> 
     <Child4>Some text about child 4</Child4> 
     <Child5>Some text about child 5</Child4> 
     <Child8>Some text about child 8</Child8> 
    </Parent> 
</RootNode> 

Ich möchte eine Validierung des Textes im Child-Knoten (der als "Einige Text über Kind n" angezeigt wird) mit der folgenden Regel

Regel: Die XML ist ungültig, wenn irgendein Kind-Knoten - (Kinder von Eltern) mehr als 256.

Es iner Textlänge hat, bedeutet das XML ungültig, wenn ein Kind des „Parent“ Knoten hat inneren Text länger betrachten dann 256 Zeichen

Ist dies mit XSD Schema Validierung möglich? Könnten Sie mir bitte helfen, eine .XSD-Datei zu erstellen, um dies zu überprüfen?

Vielen Dank im Voraus

Antwort

0

Sie können‘ t lösen Sie das mit XSD wie bereits gesagt, einfach weil Sie nicht wissen, was alle Elementnamen im Voraus sein werden. Wenn Sie nicht vollständig an die XSD-Validierung gebunden sind, sollten Sie einen Blick auf Schematron werfen, der genau diese Art von Validierung durchführen kann.

1

Es ist nicht möglich, diese automatisch zu validieren, da die maximale Anzahl von Kinderknoten unbekannt ist. Sie können vielleicht eine manuelle Validierung schreiben.

Wenn Sie in der Lage sind, das Format dieser XML zu ändern, sollten Sie, weil es schlecht entworfen ist (nicht zuletzt, weil es nicht validierbar ist ...). Sie sollten für etwas mehr wie schießen:

<RootNode> 
    <Parent> 
     <Child num="1">...</Child> 
     <Child num="2">...</Child> 
    </Parent> 
</RootNode> 

oder, wenn die Eltern andere Dinge als auch die Kinder enthalten kann, dann für die Kinder mit einem Behälter ist nützlich:

<RootNode> 
    <Parent> 
     <OtherStuff/> 
     <Children> 
      <Child num="1">...</Child> 
      <Child num="2">...</Child> 
     </Children> 
     <MoreStuff/> 
    </Parent> 
</RootNode> 
+0

Vielen Dank für die schnelle Antwort. – HAA

+0

Ist es möglich, eine benutzerdefinierte Validierung für diese Art von Anforderung mit C# .Net zu schreiben? Könnten Sie bitte einen Hinweis oder Verweis geben? – HAA

+0

Ich kenne eine Option, um jeden Knoten zu durchlaufen und zu überprüfen. Aber gibt es einen besseren Weg? – HAA