PHP DOM返回为html

PHP DOM返回为html,php,html,xml,dom,Php,Html,Xml,Dom,我有一个xml文件slider.xml,里面有html代码: <?xml version="1.0" encoding="UTF-8"?> <content> <title>Slider</title> <head> <script async="async" src='ws-custom/plugins/slider.js'></script> <scrip

我有一个xml文件slider.xml,里面有html代码:

<?xml version="1.0" encoding="UTF-8"?>
<content>
    <title>Slider</title>
    <head>
        <script async="async" src='ws-custom/plugins/slider.js'></script>
        <script async="defer" src='ws-custom/plugins/functions.js'></script>
    </head>
    <footer>
        <script async="defer" src='ws-custom/plugins/jquery.js'></script>
    </footer>
</content>
但它会返回自动关闭标记:

<script async="async" src="ws-custom/plugins/slider.js"/>
<script async="defer" src="ws-custom/plugins/functions.js"/>

这不是W3C的有效html代码

我还希望能够只写异步,即。 因为它是有效的html,但对于simplexml它不是有效的xml

多谢各位。
致以最诚挚的问候。

SimpleXML
无法正确输出空标记,您应该改用
DOMDocument
(LIBXML\u NOEMPTYTAG在SimpleXML中不起作用)

此代码获得一个起点(标记),因为您只需要它使用的第一个起点,并在起点内找到标记

它与测试源一起给出

<script async="async" src="ws-custom/plugins/slider.js"></script>
<script async="defer" src="ws-custom/plugins/functions.js"></script>


SimpleXML
无法正确输出空标记,应使用
DOMDocument
(LIBXML\u NOEMPTYTAG在SimpleXML中不起作用)

此代码获得一个起点(标记),因为您只需要它使用的第一个起点,并在起点内找到标记

它与测试源一起给出

<script async="async" src="ws-custom/plugins/slider.js"></script>
<script async="defer" src="ws-custom/plugins/functions.js"></script>

我已经编辑了脚本,现在它可以完美地工作了。 请注意第6行: $element[]=null

<?php
$xml = new DOMDocument();
$xml = simplexml_load_file('slider.xml');
$head = $xml->head->children();
foreach($head as $element){
    $element[] = null;
    echo $element->asXML().PHP_EOL;
}

我已经编辑了脚本,现在它可以完美地工作了。
请注意第6行:
$element[]=null

<?php
$xml = new DOMDocument();
$xml = simplexml_load_file('slider.xml');
$head = $xml->head->children();
foreach($head as $element){
    $element[] = null;
    echo $element->asXML().PHP_EOL;
}


xml=newdomdocument()的用途是什么?您正在立即覆盖该变量,因此第一个赋值是无用的?您将立即覆盖变量,因此第一个赋值是无用的。好的,谢谢。如果脚本包含更多标记(即页脚),如何仅在head标记中进行选择?您可以将
getElementsByTagName()
调用分层以获取标记中的标记。我已经更新了代码来限制这一点,但是这个原则也适用于其他结构。如果这有帮助,请考虑将它标记为应答()。如果其他问题也已解决,您可能还希望对这些问题执行此操作。如何获取$head[0]->childElements(作为simplexml->children())?我发现$head[0]->childNodes,但它也返回空格和制表符
在调用
$xml->load()
之前,它将删除多余的空白,并且
childNodes()
将正常。如果您更喜欢使用SimpleXML,可以执行类似以下操作:
$head2=SimpleXML\u import\u dom($head[0])
然后,
$head2
是一个SimpleXMLElement。好的,谢谢。如果脚本包含更多标记(即页脚),如何仅在head标记中进行选择?您可以将
getElementsByTagName()
调用分层以获取标记中的标记。我已经更新了代码来限制这一点,但是这个原则也适用于其他结构。如果这有帮助,请考虑将它标记为应答()。如果其他问题也已解决,您可能还希望对这些问题执行此操作。如何获取$head[0]->childElements(作为simplexml->children())?我发现$head[0]->childNodes,但它也返回空格和制表符
在调用
$xml->load()
之前,它将删除多余的空白,并且
childNodes()
将正常。如果您更喜欢使用SimpleXML,可以执行类似以下操作:
$head2=SimpleXML\u import\u dom($head[0])
然后,
$head2
是一个simplexml元素。使用$anyDOMNode->ownerDocument或$head=newdomdocument在$head\u dom中转换$head(simplexml)怎么样$head->loadXML($xml->asXML());它们似乎是干净的解决方案,但我不知道如何应用。@LorenzoDeTomasi这是你的解决方案:让我知道完美。为什么$Eng[] = NULL?SimeXML没有标记来决定是否应用自闭标签,所以PHP考虑这一点,如果声明元素为空或空,则自闭标签将不适用于使用$AydOnDead -> OnWord文档或$Head =新DoMoD文档将$ $(SimeXML)转换为$DOMDOM;head->loadXML($xml->asXML());它们似乎是干净的解决方案,但我不知道如何应用。@LorenzoDeTomasi这是你的解决方案:让我知道完美。为什么$Eng[] = NULL?SimeXML没有标记来决定是否应用自闭标签,所以PHP考虑这个,如果声明元素为空或空,则不应用自闭标签。