Php “奇异的”@名称空间;以及XML文档中的样式信息
我得到的XML文档如下所示:Php “奇异的”@名称空间;以及XML文档中的样式信息,php,xml,parsing,simplexml,tidy,Php,Xml,Parsing,Simplexml,Tidy,我得到的XML文档如下所示: <?xml version="1.0" encoding="UTF-8"?> @namespace html url(http://www.w3.org/1999/xhtml); :root { font:small Verdana; font-wei.... huge list of styling <items> <item> ... @命名空间html url(http://www.w3.org/1999
<?xml version="1.0" encoding="UTF-8"?>
@namespace html url(http://www.w3.org/1999/xhtml); :root { font:small Verdana; font-wei.... huge list of styling
<items>
<item>
...
@命名空间html url(http://www.w3.org/1999/xhtml); :根{font:small Verdana;font-wei….样式的巨大列表
...
第二行似乎阻止我解析文件
使用整洁的
true,
“输出xml”=>true,
‘wrap’=>false);
$tidy=新的tidy;
$tidy->parseFile('https://website.com/path/to/XML.ashx?param=12345“,$config);
$tidy->cleanRepair();
印刷费($tidy);
?>
这将导致:
tidy Object
(
[errorBuffer] =>
[value] => <?xml version="1.0" encoding="utf-8"?>
)
tidy对象
(
[errorBuffer]=>
[值]=>
)
使用simplexml_加载_文件()
输出:
**Warning**: simplexml_load_file(): https://website.com/path/to/XML.ashx?param=12345:1: parser error : Start tag expected, '<' not found in **C:\xampp\htdocs\local\php\script.php** on line 2
**Warning**: simplexml_load_file(): <?xml version="1.0" encoding="utf-8" ?> in **C:\xampp\htdocs\local\php\script.php** on line 2
**Warning**: simplexml_load_file(): ^ in **C:\xampp\htdocs\local\php\script.php** on line 2
**警告**:simplexml\u load\u file():https://website.com/path/to/XML.ashx?param=12345:1: 解析器错误:应为开始标记,“它不是XML,而是XHTML(),下面声明的是html名称空间,后面是CSS样式。因此,您的浏览器可以理解它,但XML解析器无法理解
@namespace html url(w3.org/1999/xhtml);
它是HTML,意味着与XML兼容,但是看起来此页面可能不符合严格的XHTML,因此不能作为XML进行解析。之后。因此,您拥有的是无效的XML,这是库告诉您的。但是Tidy(2009年3月25日发布)可以解决这一问题:
$buffer = '<?xml version="1.0" encoding="UTF-8"?>
@namespace html url(http://www.w3.org/1999/xhtml); :root { font:small Verdana; font-wei.... huge list of styling
<items>
<item></item> </items>';
$config = array(
'indent' => true,
'input-xml' => true,
'output-xml' => true,
'wrap' => false);
$tidy = new tidy;
$tidy->parseString($buffer, $config);
$tidy->cleanRepair();
print_r($tidy);
$buffer=”
@命名空间html url(http://www.w3.org/1999/xhtml);:root{font:small Verdana;font-wei….样式的巨大列表
';
$config=array(
“缩进”=>true,
“输入xml”=>true,
“输出xml”=>true,
‘wrap’=>false);
$tidy=新的tidy;
$tidy->parseString($buffer,$config);
$tidy->cleanRepair();
印刷费($tidy);
输出:
tidy Object
(
[errorBuffer] => line 2 column 1 - Warning: discarding unexpected plain text
[value] => <?xml version="1.0" encoding="utf-8"?>
<items>
<item></item>
</items>
)
tidy对象
(
[errorBuffer]=>第2行第1列-警告:丢弃意外的纯文本
[值]=>
)
因此,您很可能对“XML”有更多的问题(或者,如果您有一个非常非常大的行,那么这是一个缓冲区的限制)
由于这不是XML,您可能会问自己这是什么?它是CSS,您拥有的是所谓的更具体的a。(浏览器(用户代理)根据早期的CSS规范,CSS不必支持任何这些。即使是当前的CSS选择器API也需要任何名称空间前缀解析,以在API中引发异常。中提供了一个CSS名称空间与XML(XHTML)文档一起使用的好例子
文本块中接下来的内容是名称空间前缀及其下的CSS
因此,您所拥有的是不同数据的混合体。它不能作为XML进行有效解析,而且您也找不到任何能够处理CSS的通用浏览器——即使它可以验证——因为不清楚该文本是否为CSS(它需要包装在表示样式表的元素中)
旁注:一个正确的CSS解析器会在这里删除XML,因为它是无效的,CSS规范表示任何无效的东西都需要删除。因此,从整体上讲,您在那里拥有的东西在技术上可以与CSS文档一致。您认为它是XML,它只是CSS;)
所以,尽管这个@规则听起来很奇怪,但事实并非如此。它存在,只是不在这样一个地方
另一方面,用website.com
来掩盖源代码并没有真正的帮助-看到真实的网站可能会给你更多的上下文来告诉你更多。这很奇怪。普通XML中的所有内容都包装在一个标记中。我会去掉它,因为没有解析器会处理它。我不知道@stuff是什么;但XML不是。但是当我在浏览器中输入xml文档的url时,它会被很好地解析。它会说“此xml文件似乎没有任何与之关联的样式信息。文档树如下图所示。”然后显示xml(?)当我查看源代码时,没有@namespace或样式化junkDid,您的意思是用}关闭XML第2行的修剪部分
closing brake?无论缺陷有多严重,浏览器都会疯狂地尝试用尖括号解析任何内容,因为如果他们不这样做,至少90%的您尝试访问的网站都会出现html错误屏幕。除了浏览器没有理由假设以@namespace
标记开头的行除非它是在CSS上下文中,否则它是CSS。而一个名为
的根元素的文档肯定不是XHTML文档。@namespace
声明和名称空间CSS选择器具有出色的浏览器支持。它在这里没有任何意义,因为它不会出现在浏览器需要的情况下尝试将其解析为CSS。在早期版本中,浏览器不需要支持它。在当前版本中,CSS选择器API不需要支持命名空间声明,即更改前缀以查询它。我不知道有哪种浏览器允许通过选择器API的前缀来声明命名空间。我称之为优秀的浏览器支持rt,但你可能知道得更清楚。另外,你链接到的文档之所以说它是草稿,是因为你链接到了编辑的草稿——这基本上是文档修订系统中的主干。CSS名称空间是W3C推荐的。你又错了,CSS规范写道美国不能支持名称空间er代理。不是说没有指定名称空间。我之前有你的链接,我会修复。选择器API不允许你声明名称空间的原因是选择器API不是CSS,而@namespace
是CSS语法的一部分。如果你用CSS样式编写了包含名称空间声明和选择器的XHTML文档当然,您会发现任何浏览器,包括IE9+都可以很好地应用这些样式。
$buffer = '<?xml version="1.0" encoding="UTF-8"?>
@namespace html url(http://www.w3.org/1999/xhtml); :root { font:small Verdana; font-wei.... huge list of styling
<items>
<item></item> </items>';
$config = array(
'indent' => true,
'input-xml' => true,
'output-xml' => true,
'wrap' => false);
$tidy = new tidy;
$tidy->parseString($buffer, $config);
$tidy->cleanRepair();
print_r($tidy);
tidy Object
(
[errorBuffer] => line 2 column 1 - Warning: discarding unexpected plain text
[value] => <?xml version="1.0" encoding="utf-8"?>
<items>
<item></item>
</items>
)