2016-04-19 1 views
0

Je consomme le XML ci-dessous dans une base de données en utilisant DataStage. DataStage me permet de spécifier le XPATH aux champs spécifiques à saisir à partir de xml et à insérer dans la table db. Comme vous pouvez le voir dans le fichier XML ci-dessous, certaines balises sont vides ou inexistantes. J'ai besoin d'une expression XPATH qui peut interroger si une balise est vide ou inexistante et si elle est non plus, alors je veux que XPATH renvoie une valeur NULL de sorte que la valeur NULL puisse être insérée dans la table db pour ce champ, par exemple. sur Entity_ID 2222, le code postal n'est pas présent, donc je voudrais que le champ Code postal de la table DB soit rempli avec un DB NULL. De même, sur Entity_ID 1111, où la balise City est présente mais vide, je voudrais une valeur NULL dans le champ de table City db. Toute aide est grandement appréciée. Merci d'avance.XPath remplacer où tag est inexistant ou vide

<?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

C'est une langue * de sélection *, elle peut sélectionner des nœuds. Il ne peut pas créer de nœuds. Pour ajouter des nœuds manquants, utilisez un langage de programmation qui peut modifier XML (XSLT ou XQuery en tant que langues à usage spécifique - ou tout langage de programmation à usage général avec un analyseur XML). – Tomalak

+1

EDIT: J'ai besoin d'une expression XPATH qui peut interroger si une balise est vide ou inexistante et si elle est non plus, alors je veux que XPATH renvoie une valeur NULL afin que la valeur NULL puisse être insérée dans la table db pour ce champ. sur Entity_ID 2222, le code postal n'est pas présent, donc je voudrais que le champ Code postal de la table DB soit rempli avec un DB NULL. – user5615623

+0

Ah, c'est une meilleure description. Eh bien, je ne connais pas DataStage, mais je m'attendrais à ce que la sélection d'un nœud non existant soit interprétée comme NULL. Quelles expressions XPath avez-vous déjà et que font-elles (au lieu de provoquer l'insertion de NULL dans votre base de données)? – Tomalak

Répondre

0

Je suis autour de ce en DataStage en réglant l'étage d'entrée XML « annulable » immobilier à « oui » pour toutes les lignes de sortie (sauf la clé utilisée pour la répétition). XPath ne peut rien substituer.