2010-12-16 139 views
2

j'ai fichier appelé data_out.xml qui contient ce code xml:afficher un document XML sans les balises?

<?xml version="1.0" ?> 
    - <allproperty> 
    - <aproperty> 
     <postcode>ha15rs</postcode> 
     <price>250</price> 
     <imagefilename>home2.gif</imagefilename> 
     <visits>2</visits> 
     </aproperty> 
    - <aproperty> 
     <postcode>ha36gs</postcode> 
     <price>150</price> 
     <imagefilename>home3.gif</imagefilename> 
     <visits>1</visits> 
     </aproperty> 
    - <aproperty> 
     <postcode>ha27se</postcode> 
     <price>300</price> 
     <imagefilename>home4.gif</imagefilename> 
     <visits>4</visits> 
     </aproperty> 
    - <aproperty> 
     <postcode>ha4678</postcode> 
     <price>200</price> 
     <imagefilename>home5.gif</imagefilename> 
     <visits>5</visits> 
     </aproperty> 
     </allproperty> 

Je veux écrire un script php qui transmet ces données sans les balises, je ne suis pas inquiet au sujet de la mise en forme, juste la sortie, hourras merci ps im en utilisant simplexml

EDIT:

est ce bien ou mal:

<?php 

$fp = fopen('data_out.xml', 'r'); 
echo preg_replace('/<[^>]+>/', '', $fp); 

?> 
+0

désolé je mis à jour la question, SO didint mettre en évidence le code, ma faute :)) – getaway

+0

Comment voulez-vous qu'il se? Un espace entre chaque valeur? Nouvelle ligne? – Jonah

+0

non je juste les données à la sortie et pas les étiquettes, je ne me soucie pas de la mise en forme pour le moment !! merci je dnt vraiment comme @slaks répondre – getaway

Répondre

4

Il y a en fait construit dans PHP function for stripping tags appelé ... strip_tags().

echo strip_tags($xml_string); 

Pas besoin de se souvenir de la regex!

EDIT: Juste pour la postérité, voici la sortie de votre échantillon XML http://ideone.com/hQS4P

+0

+1, testé et fonctionne (à ma grande surprise). Je ne savais pas que ça marchait sur des tags non-HTML. – Jonah

+0

@Jonah Bron Je le crois plus en XML qu'en HTML, puisque le XML (au moins en théorie) est toujours bien formé, alors qu'il est beaucoup plus difficile de prédire avec HTML si toutes les étiquettes seront correctement formées. – Yahel

1

Si vous voulez juste enlever tous les tags et si le XML est entièrement valide, vous pouvez utiliser une expression régulière . Remplacer <[^>]+> par ''.

Si le code XML peut contenir > caractères, cela ne fonctionnera pas; vous auriez besoin d'une regex plus compliquée, consciente des chaînes.

EDIT: Par exemple:

echo preg_replace('/<[^>]+>/', '', $someXML); 
+0

+1, simple, ne nécessite pas d'analyse XML. – Jonah

+0

merci @slaks, ce n'est pas clair, im un débutant !! hehe – getaway

+0

Vous pouvez aussi lancer ceci: 'preg_replace ('/ \ s {2,} /', '', $ someXML);'. Sinon, vous allez avoir une cargaison d'espaces et de nouvelles lignes. – Jonah

2

C'est surpuissant énorme pour ce que vous essayez de faire en ce moment, mais si vous voulez l'améliorer pour formater vos données plus bien plus tard, vous voudrez peut-être considérer XSLT. Ce produit ce que vous recherchez en ce moment:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 

    <xsl:template match="text()"> 
     <xsl:variable name="clean" select="normalize-space(.)"/> 
     <xsl:if test="string-length($clean) > 0"> 
      <xsl:value-of select="$clean"/><xsl:text>&#10;</xsl:text> 
     </xsl:if> 
    </xsl:template> 

</xsl:stylesheet>