2016-04-19 5 views
0

Ich verwende XML unten in einer Datenbank mit DataStage. DataStage ermöglicht es mir, den XPATH für die spezifischen Felder anzugeben, die aus xml abgerufen und in die db-Tabelle eingefügt werden sollen. Wie Sie aus dem untenstehenden XML-Code entnehmen können, sind einige der Tags leer oder nicht vorhanden. Ich brauche einen XPATH-Ausdruck, der abfragen kann, ob ein Tag leer oder nicht existent ist, und wenn es einer ist, dann möchte ich, dass XPATH einen NULL zurückgibt, so dass der NULL in die db-Tabelle für dieses Feld eingefügt werden kann. auf Entity_ID 2222 ist der Postal_Code nicht vorhanden, daher möchte ich, dass das Postal_Code-Feld in der DB-Tabelle mit einem DB NULL gefüllt wird. In der Entity_ID 1111, wo das City-Tag vorhanden aber leer ist, würde ich einen NULL im City-db-Tabellenfeld wünschen. Jede Hilfe wird sehr geschätzt. Danke im Voraus.XPath ersetzen, wo das Tag nicht existiert oder leer ist

<?xml version="1.0"?> 
<NewDataSet> 
<Entity_Data msdata:rowOrder="0" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" diffgr:id="Entity Data1" diffgr:hasChanges="inserted" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
<Entity_ID>1111</Entity_ID> 
<Name>EntityName</Name> 
<Street>EntityStreet</Street> 
<City/> 
<State>EntityState</State> 
<Postal_Code>12345</Postal_Code> 
</Entity_Data> 
<Entity_Data msdata:rowOrder="1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" diffgr:id="Entity Data2" diffgr:hasChanges="inserted" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
<Entity_ID>2222</Entity_ID> 
<Name>EntityName</Name> 
<Street>EntityStreet</Street> 
<City>EntityCity</City> 
<State>EntityState</State> 
<Phone>555-555-5555</Phone> 
</Entity_Data> 
<Entity_Data msdata:rowOrder="4" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" diffgr:id="Entity Data5" diffgr:hasChanges="inserted" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
<Entity_ID>3333</Entity_ID> 
<Name>EntityName</Name> 
<Street>EntityStreet</Street> 
<City>EntityCity</City> 
<State>EntityState</State> 
<Postal_Code>22222</Postal_Code> 
</Entity_Data> 
</NewDataSet> 
+0

XPath kann nichts ersetzen. Es ist eine * Auswahl * Sprache, es kann Knoten auswählen. Es kann keine Knoten erstellen. Um fehlende Knoten hinzuzufügen, verwenden Sie eine Programmiersprache, die XML (XSLT oder XQuery als spezielle Programmiersprachen oder jede andere Programmiersprache mit einem XML-Parser) modifizieren kann. – Tomalak

+1

EDIT: Ich brauche einen XPATH Ausdruck, der abfragen kann, wenn ein Tag leer oder nicht existent ist und wenn es entweder ist, dann möchte ich die XPATH einen NULL zurückgeben, so dass der NULL in die db-Tabelle für dieses Feld eingefügt werden kann. auf Entity_ID 2222 ist der Postal_Code nicht vorhanden, daher möchte ich, dass das Postal_Code-Feld in der DB-Tabelle mit einem DB NULL gefüllt wird. – user5615623

+0

Ah, das ist eine bessere Beschreibung. Nun, ich kenne DataStage nicht, aber ich würde erwarten, dass die Auswahl eines nicht vorhandenen Knotens als NULL interpretiert wird. Welche XPath-Ausdrücke haben Sie bereits und was machen sie (anstatt NULL in Ihre DB einzufügen)? – Tomalak

Antwort

0

Ich habe um diesen in Datastag durch die XML-Eingangsstufe ‚null‘ Eigenschaft auf ‚yes‘ für alle Ausgabezeilen (mit Ausnahme des Schlüssels für die Wiederholung verwendet wird).