2010-12-16 53 views
2

我有文件名为data_out.xml其中包含此XML代码:显示一个没有标签的xml文档?

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

我想要写一个PHP脚本,如果没有标记输出这个数据,我不是担心格式,只是输出,欢呼声谢谢 ps IM使用SimpleXML

编辑:

这是错的还是对的:

<?php 

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

?> 
+0

抱歉,我更新了问题,所以didint突出的代码,我的错:)) – getaway 2010-12-16 00:46:04

+0

你怎么想它虽然?每个值之间有空格?新队? – Jonah 2010-12-16 00:46:10

+0

不,我只是数据输出,而不是标签,我不在乎格式化!谢谢我dnt真的很喜欢@slaks回答 – getaway 2010-12-16 00:50:11

回答

4

有实际上是一个建于PHP function for stripping tags叫...... strip_tags()

echo strip_tags($xml_string); 

不需要记住正则表达式!

编辑:只是给后人,这里的输出示例XML http://ideone.com/hQS4P

+0

+1,测试过并确实有效(令我惊讶)。不知道它在非HTML标签上工作。 – Jonah 2010-12-16 01:06:28

+0

@Jonah Bron因为(有效的)XML(至少在理论上)始终是格式良好的,但我更难用HTML来预测所有的标签是否会被正确地形成,所以我实际上比XML更信任它。 – Yahel 2010-12-16 01:11:03

1

如果你只是想要去除所有标签,并如果的XML是完全有效的,你可以使用正则表达式。

<[^>]+>替换为''

如果XML在属性中可能有>个字符,则这不起作用;你需要一个更复杂的正则表达式来识别字符串。

编辑:例如:

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

+1,简单,不需要XML解析。 – Jonah 2010-12-16 00:48:16

+0

谢谢@slaks,这是不明确的,即时新手! hehe – getaway 2010-12-16 00:51:09

+0

你也可能想在它上运行它:'preg_replace('/ \ s {2,} /','',$ someXML);'。否则,你将会有一大堆空间和新线路。 – Jonah 2010-12-16 00:57:51

2

这是巨大的矫枉过正你想现在做什么,但如果你想增强它更良好的格式化数据之后,您可能需要考虑XSLT。这会产生你在找什么现在:

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