Supprimer de l'espace de noms de XML à l'aide de PHP
J'ai un document XML qui ressemble à ceci:
<Data
xmlns="http://www.domain.com/schema/data"
xmlns:dmd="http://www.domain.com/schema/data-metadata"
>
<Something>...</Something>
</Data>
Je suis d'analyse de l'information à l'aide de SimpleXML en PHP. Je fais affaire avec des tableaux et je semble avoir un problème avec l'espace de noms.
Ma question est: Comment puis-je supprimer ces espaces? J'ai lu les données d'un fichier XML.
Merci!
Si vous souhaitez des détails... ma question initiale a été posté ici, un utilisateur déjà répondu (Merci!). Mais j'ai trouvé que l'espace de noms est à l'origine de ses boucles de ne pas courir et renvoie un tableau vide. La question originale se trouve ici: stackoverflow.com/questions/1209301/...
OriginalL'auteur jchimpo | 2009-08-07
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'aide de XPath puis c'est une limitation avec XPath et pas PHP regardez cette explication sur xpath et les espaces de noms par défaut pour plus d'info.
Plus spécialement celle de la
xmlns=""
attribut du nœud racine qui est à l'origine du problème. Cela signifie que vous aurez besoin pour vous inscrire à l'espace de noms, puis utilisez un QName par la suite à se référer à des éléments.Important: L'URI utilisé dans le
registerXPathNamespace
appel doit être identique à celui qui est utilisé dans le fichier XML.Malheureusement, cela semble être le seul moyen.
Note le Important de la section. J'avais raté la première fois que j'ai vu cette réponse.
OriginalL'auteur null
J'ai trouvé la réponse ci-dessus pour être utile, mais il n'a pas assez de travail pour moi.
Cela a fini de travailler mieux:
L'une des rares fois dans ma vie, j'ai upvoted une solution pour manipuler des données XML avec des regex. Je ne veux vraiment pas à enregistrer un espace de noms par défaut et encombrer inutilement mes requêtes xpath.
OriginalL'auteur Chris Lawrence
Le code PHP suivant détecte automatiquement l'espace de noms par défaut spécifié dans le fichier XML sous l'alias "par défaut". Pas toutes les requêtes xpath doivent être mis à jour pour inclure le préfixe
default:
Donc, si vous voulez lire des fichiers XML plutôt qu'ils contiennent un défaut NS définition soit ils ne le sont pas et que vous souhaitez interroger tous les
Something
éléments, vous pouvez utiliser le code suivant:OriginalL'auteur Alex
Supprimer l'espace de noms complètement, vous aurez besoin d'utiliser des Expressions Régulières (RegEx). Par exemple:
Alors vous avez dépouillé de tout les espaces de noms xml avant de charger le XML (être prudent avec les regex, car si vous avez des champs avec quelque chose comme:
Alors il sera de bande de la xmlns à partir de l'intérieur de la CDATA ce qui peut conduire à des résultats inattendus.
Sympa, mais il n'est pas supprimer la balise de fermeture de l'
OriginalL'auteur null