我有一些php的问题,这是我的代码
test.xml如:
<?xml version='1.0'?>
<document responsecode="200">
<result count="10" start="0" totalhits="133047950">
<title>Test</title>
<from id = "jack">655</from>
<to>Tsung</to>
</result>
</document>
php代码:
<?php
header("content-type:text/html; charset=utf-8");
$xml = simplexml_load_file("test.xml");
$text = htmlspecialchars($xml->asXML());
$pattern = "/</";
$result = preg_match($pattern,$text);
echo $result;
?>
结果显示为“0”,表示未找到,所以我更改$ pattern value
$pattern = "document" ;
结果是显示“1”(它的意思是找到)
我调试了很多时间......
也许编码UTF-8,ASCII问题或OR "/</"
错误?
我的目的是要解析此字符串然后获取
'<title> .. </title>'
有人可以告诉我,我的错误在哪里?谢谢:))
答案 0 :(得分:2)
您正在使用解析器,只需解析它,不需要正则表达式。
$xml = '<?xml version=\'1.0\'?>
<document responsecode="200">
<result count="10" start="0" totalhits="133047950">
<title>Test</title>
<from id = "jack">655</from>
<to>Tsung</to>
</result>
</document>';
$xml = new SimpleXMLElement($xml);
echo $xml->result->title->asXML();
输出:
<title>Test</title>
正如其他答案所述,问题在于您使用htmlspecialchars
。你的正则表达式也不够具体,无法找到title元素。如果您需要使用正则表达式,您可以这样做:
/((<|<)title(>|>).*?\2\/title\3)/
演示:https://regex101.com/r/kM8tR8/1
捕获组1将包含您的标题元素。如果标题文本可以扩展多行,请添加s
修饰符。
答案 1 :(得分:1)
问题是iostat 1 10
会将特殊字符转换为HTML实体,例如htmlspecialchars()
到<
,<
到>
等等。所以如果要解析xml文档并获取>
然后您可以执行以下操作:
title
答案 2 :(得分:1)
请勿致电htmlspecialchars
,将所有XML标记转换为HTML实体。
<?php
header("content-type:text/html; charset=utf-8");
$xml = simplexml_load_file("test.xml");
$text = $xml->asXML();
$pattern = "/</";
$result = preg_match($pattern,$text);
echo $result;
?>